回答
剝離庫僅意味着調試符號被剝離。圖書館的其他部分已經到位。鏈接到這樣的庫可能遇到的問題是關於缺少調試符號的鏈接器警告。如果沒有適當的調試符號,可能會遇到另一個問題,那就是沒有適當的調試符號,這很有趣。
對於外部/非外部(你的意思是出口?)符號的問題,如果你鏈接到靜態庫,它不需要定義任何'出口',因爲它被鏈接到你的代碼只是作爲一個大對象文件。鏈接到動態庫,根據您感興趣的平臺而略有不同。在Windows上,您的dll需要聲明您想要使用的函數爲(declspec) __dllexport
。在linux上,如果內存爲我服務,則不需要聲明任何類似的內容,並且可以使用.so文件中的函數,就好像它們在代碼中一樣,與靜態庫類似。
更新:
亞歷克斯,我不是100%肯定,但我相信,我寫的關於Linux適用於OS X在這種情況下。只要你有一個帶有函數聲明的頭文件,你應該可以很好地使用它們。如果您在提供的頭文件中沒有某些功能,但有權訪問源,則可以創建自己的頭文件。然而,這是一個非常糟糕的想法,因爲SDK的作者不想讓你訪問這些功能,也不會將它們添加到公共頭文件中,因此它們可以隨時隨意修改它們的功能,可能會讓你留下非工作的代碼,並需要重新編寫/重新設計某些東西。同樣的情況也適用於所有「無證」功能,它們可能會被修改或刪除,如果它導致您的問題,您是唯一有罪的人,也是唯一關心的人。謹慎行事。
不可以鏈接到非外部符號。
根據定義,非外部符號不會從編譯器/彙編器/鏈接器導出。那些符號消失了,從宇宙中消失了,只有連接器看到模塊被鏈接的時候纔會記憶消失。
早在早期的鐵器時代,當計算機仍然由分立晶體管制造時,編譯器和彙編器可以被命令爲每個模塊打印符號表。今天,我們稱之爲「調試信息」,它通常不會被打印,但存儲在調試工具可以在加載模塊中找到的地方。而且正是你的夜晚構建中被剝奪的東西。
你試圖做什麼?如果您試圖訪問庫中顯式非外部的例程(或變量),那麼可能有一個非外部原因。與圖書館的維護人員交談,解釋你爲什麼要訪問這些例程(或變量),並聽他們解釋爲什麼他們不提供這種訪問。
但是符號依然存在 - 如果我做'nm -m WebCore',我可以看到它們,但我不能鏈接到它們(因爲它們是非外部的)。它們之所以是私有的,是因爲WebCore是WebKit的一個傘式框架,而WebKit爲WebCore提供了一個公共API。不幸的是,API只是Objective C,而不是C++,因此我想繞過它。我擔心不可能。 – 2010-01-14 17:07:29
我傾向於說不,只要問題是這個將軍。
鏈接器可能會對內部函數執行調用者/被調用者優化,而不能用於外部函數。例如。它可以檢測到呼叫者沒有關心某個寄存器的保存,並且優化了被呼叫者的序列碼中的寄存器的保存。
我知道這是舊的,但我一直在尋找同樣的東西,看來這種技術可能會被工作:
http://en.wikibooks.org/wiki/Reverse_Engineering/Mac_OS_X#Example
- 1. C++鏈接器不能使用外部符號與靜態libcurl
- 2. 可能的符號鏈接攻擊
- 3. 未解決的外部符號鏈接到glew32s.lib
- 4. Nexus符號鏈接不能看到install4j_java_home
- 5. 是否有可能鏈接到外部HTM頁面?
- 6. Eclipse鏈接到外部類
- 7. 鏈接到外部主頁
- 8. KDevelop4鏈接到外部庫
- 9. 符號鏈接svn到linux
- 10. 符號鏈接
- 11. 符號鏈接
- 12. 鏈接:錯誤LNK2001:無法解析的外部符號NtProcessStartup
- 13. 解析的外部符號鏈接我的庫時
- 14. 無法解析的外部符號鏈接器錯誤(C++)
- 15. MASM32 - 「未解決的外部符號」用下劃線,而鏈接
- 16. C++鏈接錯誤無法解析的外部符號
- 17. OpenVDB鏈接器錯誤:無法解析的外部符號
- 18. log4cpp鏈接無法解析的外部符號
- 19. 鏈接libtiff - LNK2001:解析外部符號TIFFOpen
- 20. C++鏈接器無法解析的外部符號
- 21. 將AMCharts項目符號與外部內容滑塊鏈接
- 22. Visual C++鏈接器無法解析FFmpeg的外部符號
- 23. 鏈接錯誤C++無法解析的外部符號
- 24. 鏈接器錯誤 - 無法解析的外部符號
- 25. 鏈接錯誤 '解析外部符號':使用模板
- 26. JSF外部鏈接
- 27. Joomla外部鏈接
- 28. 接頭抱怨「解析外部符號」
- 29. 可移植鏈接外部庫?
- 30. 我如何得到一個鏈接錯誤:無法解析的外部符號
對不起,我也不是很具體的。這是一個OSX框架(所以是一個動態庫)。圖書館只出口某些符號 - 其中大多數是「非外部」的。我想知道我是否可以訪問這些非外部符號。 – 2010-01-14 15:00:39