2010-10-11 34 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(请参阅大纲),以便可能也需要,但我不记得它是必要的。