在Solaris下链接Sun Studio 10中的错误

时间:2010-10-11 11:41:33

标签: c++ c network-programming solaris sunstudio

我写了一个这样的测试程序:

#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

输出为“未引用符号套接字”。

请给我指示,以便我能解决这个问题。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

您必须在命令行中的套接字库中进行链接:

-lsocket 

答案 2 :(得分:2)

您需要在链接步骤中添加至少-lsocket,即链接libsocket.so。我不知道如何在SunStudio UI中做到这一点 - 它的项目基于makefile吗?

手册页通常是查找所需库的好地方;在这种情况下,man page for socket也会推荐-lnsl(请参阅概要),因此可能也需要,但我不记得这是必要的。