Связывание ошибок в Sun Studio 10 под Solaris
-
29-09-2019 - |
Вопрос
Я написал подобную тестовую программу:
#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
Вывод «Символ розетки не ссылается».
Пожалуйста, дайте мне направление, чтобы я мог решить это.
Решение
Вот вопрос.
Я написал подобную тестовую программу:
#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
Вы получите следующее со страницы Man:
SYNOPSIS
cc [ flag ... ] file ... -lsocket -lnsl [ library ... ]
То -l
Флаг указывает, что для использования этой функции вам также необходимо связать названную библиотеку. В этом случае вам говорят добавить -lsocket -lnsl
к тому cc
Командная строка следующим образом:
$ /tool/sunstudio/bin/cc test.c -lsocket -lnsl
Другие советы
Вы должны ссылаться в библиотеке сокетов, в командной строке:
-lsocket
Вам нужно добавить хотя бы -lsocket
На ваш уровень ссылки, то есть ссылка против libsocket.so. Я не знаю, как это сделать в Sunstudio Ui, хотя - это его проекты Makefile на основе?
Страница человека обычно является хорошим местом для поиска необходимых библиотек; В этом случае мужская страница для розетки Также рекомендует -lnsl
(См. Синопсис) Так что это тоже может потребоваться, но я не помню, чтобы это было необходимо.