Решено: Проблема при компиляции (C, GCC)

Модератор: Модераторы разделов

Аватара пользователя
enfx
Сообщения: 8
ОС: GNU/Linux

Решено: Проблема при компиляции

Сообщение enfx »

Проблема при компиляции.
Язык С, компилятор GCC.

Код: Выделить всё

cc -Wall -g   -c -o server.o server.c

server.c: In function ‘server_run’:
server.c:177: warning: passing argument 2 of ‘bind’ from incompatible pointer type
/usr/include/sys/socket.h:115: note: expected ‘const struct sockaddr *’ but argument is of type ‘struct sockaddr_in *’

server.c:190: warning: passing argument 2 of ‘getsockname’ from incompatible pointer type
/usr/include/sys/socket.h:119: note: expected ‘struct sockaddr * __restrict__’ but argument is of type ‘struct sockaddr_in *’

server.c:207: warning: passing argument 2 of ‘accept’ from incompatible pointer type
/usr/include/sys/socket.h:214: note: expected ‘struct sockaddr * __restrict__’ but argument is of type ‘struct sockaddr_in *’

server.c:223: warning: passing argument 2 of ‘getpeername’ from incompatible pointer type
/usr/include/sys/socket.h:133: note: expected ‘struct sockaddr * __restrict__’ but argument is of type ‘struct sockaddr_in *’


в исходниках такие строки:

server.c:

Код: Выделить всё

177 rval = bind (server_socket, &socket_address, sizeof (socket_address));

190 rval = getsockname (server_socket, &socket_address, &address_length);

207 connection = accept (server_socket, &remote_address, &address_length);

223 rval = getpeername (connection, &socket_address, &address_length);


/usr/include/sys/socket.h:

Код: Выделить всё

115 extern int bind (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len)

119 extern int getsockname (int __fd, __SOCKADDR_ARG __addr,

214 extern int accept (int __fd, __SOCKADDR_ARG __addr,

133 extern int getpeername (int __fd, __SOCKADDR_ARG __addr,


:huh:
- Знаешь в чём сила брат ?
- Сила в добре, а добро можно делать только с чистыми руками, холодной головой и горячим сердцем!
Спасибо сказали:
Аватара пользователя
Red User
Сообщения: 229
ОС: Debian

Re: Решено: Проблема при компиляции

Сообщение Red User »

Код: Выделить всё

(struct sockaddr*)&socket_address
А ведь когда-то не боялись мы программы любой,
И с одним лишь debug'ом выходили на бой,
И искусно написанный вирус встречали как брата
Спасибо сказали:
Аватара пользователя
enfx
Сообщения: 8
ОС: GNU/Linux

Re: Решено: Проблема при компиляции

Сообщение enfx »

Red User писал(а):
08.05.2010 18:41

Код: Выделить всё

(struct sockaddr*)&socket_address


Благодарю!
- Знаешь в чём сила брат ?
- Сила в добре, а добро можно делать только с чистыми руками, холодной головой и горячим сердцем!
Спасибо сказали:
Аватара пользователя
enfx
Сообщения: 8
ОС: GNU/Linux

Re: Решено: Проблема при компиляции

Сообщение enfx »

Не успел праздник начаться как:

Код: Выделить всё

cc -Wall -g   -c -o server.o server.c
server.c: In function ‘server_run’:
server.c:245: warning: implicit declaration of function ‘exit’
server.c:245: warning: incompatible implicit declaration of built-in function ‘exit’


server.c:

Код: Выделить всё

245 exit (0);


:dry:
- Знаешь в чём сила брат ?
- Сила в добре, а добро можно делать только с чистыми руками, холодной головой и горячим сердцем!
Спасибо сказали:
Аватара пользователя
Red User
Сообщения: 229
ОС: Debian

Re: Решено: Проблема при компиляции

Сообщение Red User »

Вроде ж совершенно очевидная проблема. Не объявлена функция. Значит, надо её обявить. Правильный способ это сделать - вставить заголовочный файл с её объявлением. Какой именно заголовочный файл, можно узнать с помощью

Код: Выделить всё

man 3 exit

А ведь когда-то не боялись мы программы любой,
И с одним лишь debug'ом выходили на бой,
И искусно написанный вирус встречали как брата
Спасибо сказали:
Аватара пользователя
enfx
Сообщения: 8
ОС: GNU/Linux

Re: Решено: Проблема при компиляции

Сообщение enfx »

Red User писал(а):
08.05.2010 20:41
Вроде ж совершенно очевидная проблема. Не объявлена функция. Значит, надо её обявить. Правильный способ это сделать - вставить заголовочный файл с её объявлением. Какой именно заголовочный файл, можно узнать с помощью

Код: Выделить всё

man 3 exit


Угу :)

Код: Выделить всё

#include <stdlib.h>


;)

Спасибо. Теперь всё работает. Тему можно закрыть. :happy:
- Знаешь в чём сила брат ?
- Сила в добре, а добро можно делать только с чистыми руками, холодной головой и горячим сердцем!
Спасибо сказали: