我在Linux中創建了一個共享庫(.so),我面臨一個非常奇怪的問題。 最初我在庫中添加了3個函數(write_myown,setfolder,register),然後我又添加了一些(init,write_re)。Linux上我自己的共享庫中的某些函數鏈接問題
基本上整個庫都是用C++實現的,但是這些API需要從基於C和C++的可執行文件中調用。因此我使用extern「C」作爲API。
我面臨的奇怪問題是,當我嘗試使用函數 write_myown,setfolder和register時,鏈接將通過並創建可執行文件。
但是,當我嘗試調用函數init或write_re鏈接失敗,與未定義的引用錯誤。
即使是我認爲但並不確定的陌生事物,我猜想當我構建C程序時它只能正常工作,但是當我構建基於C++的代碼時,可以看到此問題。
我已經檢查並確認以下事項
- (的.so)在/ usr/lib目錄中現有的庫(我把它放在那裏)
- -p LDCONFIG | grep mylibname顯示我的庫存在。
- 當我不調用init或write_re時,生成可執行文件,objdump/readelf顯示相應的引用。
- ldd在mylibrary.so上同時顯示init和write_re都存在,可見性是全局的。
- 創建的可執行文件或.0顯示對mylibrary的正確依賴關係。
- 沒有版本的mylibrary。
- 我已確認它引用了正確的.so。
- nm在我的庫上顯示所有功能都存在。
任何想法如何我可以解決這個問題?可能是什麼問題。 如果不是我可以繼續調查。 請讓我知道是否需要任何進一步的細節。
最好的問候, 帕
'write'是'libc.so.6'中的一個函數,'register'是關鍵字。你應該使用不同的名字... –
如果給出一個C接口,通常讓所有的符號共享一個共同的前綴....所以重命名所有的函數,以便tkeir名稱以例如「 'pavan_' –
嗨巴西爾,感謝您的回覆,抱歉,我沒有使用任何標準函數名稱。 – PavanMysore