在solaris上,当用g ++编译时,socket()和bind()不会被dlsym()拦截

时间:2017-12-07 08:24:26

标签: sockets gcc g++ solaris xnet

我使用套接字函数编写了一个简单的服务器程序。 使用g++编译时,它会为send,__ xnet_socket,listen,accept,__ xnet_bind提供未定义的符号错误。

为什么socket和bind的符号与其他符号不同。 此外,当使用gcc编译程序时,不会发生此“xnet”差异。 与libsocket.so链接时会出现此链接错误。

实际上,我正在编写一个共享库,它重载这些套接字API并使用dlsym()拦截它们。 在Solaris上,当使用gcc编译此库时,这些调用将通过库进行,但在使用g++进行编译时,socket()bind()调用不会被截获,但所有其他apis都会被截获通过图书馆。

libxnet.so对此做些什么吗? 可以提供一些帮助吗?

1 个答案:

答案 0 :(得分:0)

您需要链接libsocket(通过-lsocket),以便链接器获取这些功能。 libxnet是11.3中的过滤器库;函数从libxnet移到libsocket,libnsl和libc。

我在过去发现在Solaris上构建OSS时,将-lsocket -lnsl附加到LDLIBS通常可以轻松地完成配置和构建阶段。链接器足够智能,可以从输出中删除不必要的引用。