首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Solaris下Sun Studio 10中的链接错误

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

Stack Overflow用户
提问于 2010-10-11 19:41:33
回答 3查看 4K关注 0票数 2

我写了一个测试程序,如下所示:

代码语言:javascript
复制
#include <sys/socket.h>
int main( void ) {
    int  sock = socket(AF_INET, SOCK_DGRAM, 0);
    return 0;
}

并尝试编译它:

代码语言:javascript
复制
$ /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

输出是"symbol socket is not referenced“。

请给我方向,这样我就可以解决这个问题。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-10-11 19:54:38

问题来了。

我写了一个测试程序,如下所示:

代码语言:javascript
复制
#include <sys/socket.h>
int main( void ) {
    int  sock = socket(AF_INET, SOCK_DGRAM, 0);
    return 0;
}

并尝试编译它(这是真正有帮助的输出,你必须记住,现代编译器真的会尽最大努力帮助你修复任何问题):

代码语言:javascript
复制
$ /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,您将从手册页获得以下内容:

代码语言:javascript
复制
SYNOPSIS
     cc [ flag ... ] file ... -lsocket  -lnsl  [ library ... ]

-l标志表明,要使用此函数,还需要链接命名的库。在这种情况下,系统会告诉您将-lsocket -lnsl添加到cc命令行,如下所示:

代码语言:javascript
复制
$ /tool/sunstudio/bin/cc test.c -lsocket -lnsl
票数 6
EN

Stack Overflow用户

发布于 2010-10-11 19:45:50

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

代码语言:javascript
复制
-lsocket 
票数 2
EN

Stack Overflow用户

发布于 2010-10-11 19:46:27

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

手册页通常是查找所需库的好地方;在这种情况下,man page for socket还建议使用-lnsl (请参阅摘要),因此可能也需要这样做,但我不记得有必要这样做。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3905829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档