2013-06-01 4 views
5

Я написал простую программу клиентского сервера, на которой сервер принимает сообщения от клиентов и печатает их данные (жестко закодированные для моего назначения). Сначала я написал это на Linux (Fedora), и он работал отлично. Но когда я пытаюсь скомпилировать код сервера на моем mac, это не сработает.Программа клиентского сервера в C

Вот сообщение после компиляции:

Undefined symbols for architecture x86_64: 
    "_error", referenced from: 
     _main in cc3O1167.o 
ld: symbol(s) not found for architecture x86_64 
collect2: ld returned 1 exit status 

Может кто-нибудь помочь мне с этим?

+0

Действительно, чтобы помочь вам с этим, вы, вероятно, используете другую стандартную библиотеку C, которая вызывает проблему с символом, который не существует. Я бы предложил запустить ld с флагом -lc. –

+0

У вас проблемы с совместимостью. Ваш Fedora 32bit? – ka2m

+0

Разделите свою программу до минимума, чтобы воспроизвести проблему, а затем разместите этот код здесь. У меня есть Mac, но вы не можете помочь без кода. –

ответ

0

Ваша error функция, вероятно, в другом файле, чем основной файл, вы в том числе его декларации, но не ее реализации:

Try компилировать так:

g++ main.c -l<filetolink> 

filetolink быть имя из файл, содержащий реализацию функции error (без расширения)

Ссылка: C - Undefined symbols for architecture x86_64 when compiling on Mac OSX Lion Кажется, что имеется несколько решений для t его проблема, когда прибегая к помощи первой строки ошибки

3

Поместите это в верхней части основного файла:

#ifdef __APPLE__ 
# define error printf 
#endif 
1

От «человек 3 ошибки»:

These functions and variables are GNU extensions, and should not be 
    used in programs intended to be portable. 

Так, не используйте эту функцию в программах, которые должны работать на системах, отличных от GNU, или предоставлять свою собственную замену.

Смежные вопросы