簡體   English   中英

在solaris上,使用g ++編譯時,不會使用dlsym()攔截socket()和bind()

[英]On solaris, when compiled with g++, socket() and bind() are not getting intercepted using dlsym()

我已經使用套接字函數編寫了一個簡單的服務器程序。 使用g++編譯時,它會為send,__ xnet_socket,listen,accept和__xnet_bind提供未定義的符號錯誤。

為什么套接字和綁定的符號與其他符號不同。 同樣,當使用gcc編譯程序時,不會發生這種“ xnet ”差異。 libsocket.so鏈接時,將發生此鏈接錯誤。

實際上,我正在編寫一個共享庫,該庫將重載這些套接字API並使用dlsym()攔截。 在Solaris上,當使用gcc編譯該庫時,這些調用將通過該庫,但是當使用g++編譯時,則不會攔截socket()bind()調用,但是所有其他api都將通過該庫。

libxnet.so是否libxnet.so做了某事? dtrace會有所幫助嗎?

您需要與libsocket鏈接(通過-lsocket ),以便鏈接器可以選擇這些功能。 libxnet是11.3中的過濾器庫; 函數從libxnet移到了libsocket,libnsl和libc。

過去,我在Solaris上構建OSS時發現,將-lsocket -lnsl附加到LDLIBS通常可以使我輕松地完成配置和構建階段。 鏈接器足夠聰明,可以從輸出中刪除不必要的引用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM