我写了这样的测试程序:

#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 您将从人页面上获得以下内容:

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

-l 标志表示要使用此功能,您还需要链接命名库。在这种情况下,您被告知要添加 -lsocket -lnslcc 命令行如下:

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

其他提示

您必须在命令行中的插座库中链接:

-lsocket 

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

人页面通常是寻找所需库的好地方。在这种情况下 插座的男人页面 也推荐 -lnsl (请参阅摘要),所以也可能需要,但我不记得它是必要的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top