2010-10-11 36 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 2010-10-11 11:44:55

+0

什麼是鏈接錯誤? – claws 2010-10-11 11:45:50

+0

致命:符號引用錯誤。 – Siddiqui 2010-10-11 11:48:24

回答

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 -lnslcc命令行如下:

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

@PP,首先我對我的問題表示歉意..我沒有明白你的觀點。請解釋一下。 – Siddiqui 2010-10-11 12:01:37

+0

他意味着您應該提供更多信息:特別是您從鏈接器獲得的錯誤消息。他還建議你爲我們提供一個完整的可編輯範例,但我不確定是否有必要。 – Rup 2010-10-11 12:03:58

+0

@阿曼,道歉,有時我會遇到苛刻的。這是,特別是,我正在尋找鏈接器錯誤。你很幸運,你的問題很常見,我們中的大多數人都可以立即確定解決方案。但是,10次中的9次並非如此 - 這是有問題的程序返回的特定錯誤,它將幫助其他人解決您的問題。 – 2010-10-11 12:09:33

2

你在套接字庫鏈接,在命令行:

+0

請給我一些解釋。 – Siddiqui 2010-10-11 11:49:21

+1

您編譯時使用的Ide(SunStudio)使用您在項目設置或makefile中提供的選項。這些選項必須包含您的程序需要的所有庫;庫必須(靜態或動態)鏈接到最終的可執行程序。要連接套接字庫,選項是上面的-lsocket。 – vulkanino 2010-10-11 11:52:56

2

你需要至少-lsocket添加到您的鏈接步驟,即對鏈接libsocket.so。但我不知道如何在Sun Studio UI中執行此操作 - 它的項目基於makefile嗎?

手冊頁通常是查找所需庫的好地方;在這種情況下,man page for socket也建議使用-lnsl(請參閱大綱),以便可能也需要,但我不記得它是必要的。