компиляция сетевой программы freebsd

Я пытаюсь скомпилировать несколько простых сетевых программ на freebsd 8 и столкнулся с проблемами компиляции. Я создаю простые клиент-серверные программы, но ни функция, ни структура из сети не компилируются.

Например. Я использую стандартный вызов socket() для создания сокета, но сталкиваюсь с ошибкой «Вызываемый объектный сокет не является функцией».

Если я удалю сетевой код, моя игрушечная программа скомпилируется. Для простоты я привел простой пример, который не компилируется. :

#include <stdio.h>                        
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
void main(){
 int socket = socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);
 printf("Could create sockets without any issues.\n");
}

Я скомпилировал его с помощью «cc toy_prog.c -lc» и выдал указанную ошибку.


person agent.smith    schedule 17.12.2012    source источник
comment
что вы имеете в виду, что моя программа не может связать библиотеку (libc)? Является ли это ограничением в дизайне / построении вашего кода ИЛИ вы имеете в виду, что компоновщик не может найти libc ИЛИ ?? Сообщения об ошибках (в правильном формате), включенные в ваше сообщение, облегчат людям задачу помочь вам. Вы знаете о make и makefile? Только самые простые проекты могут обойтись без make-файла. Удачи.   -  person shellter    schedule 17.12.2012
comment
Как вы вызываете сокет? Он имеет подпись int socket(int domain, int type, int protocol). Возможно, вы могли бы предоставить выдержку из вашего кода.   -  person Kevin A. Naudé    schedule 17.12.2012
comment
пожалуйста, просто введите свой код в свой вопрос. Удачи.   -  person shellter    schedule 17.12.2012


Ответы (1)


Очень простая ошибка. Вы определили локальную переменную с тем же именем, что и внешняя функция, которую вы пытаетесь вызвать (socket). Попробуйте следующее, и вы получите ту же ошибку:

int f()
{
    return 0;
}

void main()
{
    int f = f();
}
person Kevin A. Naudé    schedule 17.12.2012