2010-10-11 1 views
2

Я написал тестовую программу, как это:Связывание Ошибка в Sun Studio 10 под Solaris

#include <sys/socket.h> 
int main(void) { 
    int sock = socket(AF_INET, SOCK_DGRAM, 0); 
    return 0; 
} 

И попытался скомпилировать:

$ /tool/sunstudio/bin/cc test.c 
Undefined      first referenced 
symbol        in file 
socket        test.o 
ld: fatal: Symbol referencing errors. No output written to a.out 

Выход «гнездо символ не ссылается».

Просьба дать мне направление, чтобы я мог решить это.

+2

Какую ошибку вы получаете? – codaddict

+0

Что это за ошибка связи? – claws

+0

fatal: Символьные ссылки на ошибки. – Siddiqui

ответ

6

Возникает вопрос.

Я написал тестовую программу, как это:

#include <sys/socket.h> 
int main(void) { 
    int sock = socket(AF_INET, SOCK_DGRAM, 0); 
    return 0; 
} 

И пытался скомпилировать его так (это выход, который действительно помогает, вы должны помнить, что современные компиляторы действительно стараются изо всех сил, чтобы помочь вам решить любые проблемы):

$ /tool/sunstudio/bin/cc test.c 
Undefined      first referenced 
symbol        in file 
socket        test.o 
ld: fatal: Symbol referencing errors. No output written to a.out 

Теперь, с выходом мы можем видеть, что символ socket не ссылается. Так что, если вы наберете man socket вы получите следующее со страницы человека:

SYNOPSIS 
    cc [ flag ... ] file ... -lsocket -lnsl [ library ... ] 

Флаг -l указывает, что для использования этой функции необходимо также связать с именем библиотеки. В этом случае вам говорят, чтобы добавить -lsocket -lnsl к cc командной строки следующим образом:

$ /tool/sunstudio/bin/cc test.c -lsocket -lnsl 
+0

@PP, прежде всего извиняюсь за мой вопрос .. Я не понял вашу точку зрения. Пожалуйста, объясните. – Siddiqui

+0

Он означает, что вам следует предоставить дополнительную информацию: в частности, сообщение об ошибке, которое вы получаете от компоновщика. Он также предлагает вам предоставить полный компилируемый пример для нас, чтобы воспроизвести, но я не уверен, что это всегда необходимо. – Rup

+0

@Arman, извинения, иногда встречаю суровые. Это была, в частности, ошибка компоновщика, которую я искал. Вам повезло, что ваша проблема является общей, и большинство из нас может сразу определить решение. Но 9 раз из 10 это не так - и это конкретная ошибка, возвращаемая рассматриваемой программой, которая поможет другим решить вашу проблему. –

2

вы должны связать в библиотеке сокетов, в командной строке:

+0

любезно сообщите пожалуйста. – Siddiqui

+1

Идея, которую вы используете (SunStudio) при компиляции использует параметры, которые вы предоставляете в настройках проекта или makefile. Эти параметры должны включать все библиотеки, которые необходимы вашей программе; библиотеки должны быть связаны (статически или динамически) с конечной исполняемой программой. Чтобы связать библиотеку сокетов, это опция -lsocket. – vulkanino

2

Вы должны добавить по крайней мере -lsocket к Вашей ссылке шага, то есть связь с libsocket.so. Однако я не знаю, как это сделать в пользовательском интерфейсе SunStudio, - основываются ли его проекты makefile?

Страница руководства обычно является хорошим местом для поиска необходимых библиотек; в этом случае man page for socket также рекомендует -lnsl (см. краткое описание), чтобы это могло потребоваться, но я не помню, чтобы это было необходимо.

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