我有一個第三方共享對象文件(庫文件)a.so,但是當我做 ldd -d -r a
它給了很多像undefined symbol: _ZTVN10__cxxabiv117__class_type_infoE
未定義符號。我檢查和一派,發現這個符號從標準libstdc++
到來。所以爲了使a.so
工作,我做了如下: g++ -fPIC -static-libgcc -L. -shared -o liba.so -Wl,-soname,liba.so -L. a.so
現在,當我做ldd -d -r liba
,我得到所有的參考。 但是,這裏的問題是我想與我的應用程序共享liba.so,它將在不同的linux機器上運行,其中a.so
將不會被liba.so
找到。 有沒有一種方法,我可以通過添加STD庫和提供的第三方共享庫到單一的共享對象,我可以使用刪除未定義的符號?如何添加到libgcc的.so文件
回答
有一種方法在那裏我可以通過添加STD庫和提供第三方共享庫成單共享對象,並且我可以使用除去未定義的符號?
號在絕UNIX系統(與AIX的一個例外)的.so
是接頭的一最終產物,並進一步操縱鏈路是不可能的。
現在,您的實際問題似乎是libthird_party.so
在.dynamic
部分中不存在對libgcc_s.so.1
的依賴關係。它可能可能使用ELF
編輯工具,如elfsh
link二進制修補此庫。
最後,你實際上很有可能沒有一個問題來解決擺在首位。由於要運送該庫用自己的可執行文件,只要該可執行文件本身鏈接對libgcc_s.so.1
,符號是第三方庫需要將出席反正。
Java代碼System.loadLibrary(libthird_party.so)是第一次調用,然後是我自己的可執行文件。我需要加載這兩個庫。在第一次加載時,我得到錯誤。 – user2018303
@ user2018303您的評論沒有任何意義。你的可執行文件與Java有什麼關係? –
- 1. 如何在tizen中添加.so文件
- 2. 將.so文件添加到Android項目
- 3. 拷貝所有* .so文件libgcc的除外。所以*
- 4. 如何將.so文件添加到Linux中的java.library.path中
- 5. 如何將.h和.so文件添加到iOS項目
- 6. 如何添加armeabi so lib到Unity
- 7. 如何將.so文件鏈接到.so文件
- 8. 如何使用VS2015添加cordova插件.so文件?
- 9. 添加一個帶類文件的.so庫到sbt scala項目
- 10. 如何將eclipse中現有的.so文件添加到android項目中?
- 11. 如何在Android.mk中添加一些第三方* .so文件?
- 12. 如何在Android庫模塊中添加.so文件
- 13. 如何在Android Sdk中添加JAR和.SO文件
- 14. 如何在IntelliJ中添加多個本機庫(.so)文件
- 15. 將.so文件添加到gradle項目中以獲得罐子
- 16. 將.so文件添加到Android Studio,執行失敗
- 17. 將.so文件添加到android解決方案
- 18. 如何生成.so文件
- 19. Android ndk文件.so。如何運行文件.so
- 20. 如何將庫.so文件加載到android應用程序中?
- 21. 無法加載.so文件
- 22. 如何將.so文件映射到gdb中的源文件
- 23. 如何添加JQuery的到PHP文件
- 24. GCC/Linux:將靜態庫添加到.so?
- 25. 添加.so到Xamarin android綁定庫
- 26. 如何將本機庫(.so)添加到android studio?
- 27. libstdC++。so:錯誤添加符號:錯誤格式的文件
- 28. 如何查找某個.so文件與其他.so文件的鏈接。
- 29. .so文件的Linux
- 30. 如何將行添加到.csv文件
使用'nm'工具來找出這個符號來自哪裏:'libgcc_s.so'不是含義,因爲它不包含與C++相關的符號。 (我的猜測是的libstdC++。左右) –
謝謝!是你的猜測是正確的,它的libstdC++。所以 – user2018303
你有沒有實際測試過這個'a.so'和遇到的問題?你收到了哪些錯誤信息? (是用C++編寫的主程序嗎?C++插件只能用於C++主程序) –