8
A
回答
10
是的,你需要靜態庫來建立一個靜態鏈接的可執行文件。
靜態庫是編譯對象的包。當靜態鏈接到庫時,它與獲取該庫的編譯結果,在當前項目中解壓縮它們並將它們用作自己的對象相同。
動態庫已經鏈接。這意味着像重定位這樣的信息已經被修復並被拋出。
此外,動態庫必須編譯爲位置無關的代碼。這不是對靜態庫的限制,並且會在某些常見平臺(如x86)上導致性能的顯着差異。
存在諸如ELF Statifier這樣的工具,它們試圖將動態鏈接的庫綁定到動態鏈接的可執行文件中,但在任何情況下都很難生成正確運行的結果。
6
沒有靜態編譯,只有靜態鏈接。爲此,您需要靜態庫。靜態鏈接和動態鏈接之間的區別在於,前者的名稱在鏈接時(僅在編譯時之後)解析,而後者則在程序開始運行時解析。
靜態和動態庫可能包含或不包含相同的信息,具體取決於許多因素。關於是否靜態或動態鏈接您的代碼的決定非常重要,並且通常會影響應用程序體系結構。
+0
謝謝,糾正'編譯'爲'鏈接'。 – 2009-06-20 18:06:27
2
鏈接到靜態鏈接程序的所有庫必須是靜態變體。雖然動態(libfoo.so)和靜態(libfoo.a)庫在它們中具有相同的功能,但它們是不同的格式文件,因此您需要程序的匹配類型。
1
另一個選擇是貂王(http://magicErmine.com) 這就像statifier,但能夠處理記憶隨機化。
相關問題
- 1. C靜態鏈接庫嗎?
- 2. 鏈接靜態庫與靜態庫
- 3. UNIX:靜態庫鏈接到靜態庫
- 4. 靜態鏈接庫
- 5. Visual Studio:靜態鏈接到靜態庫
- 6. XCode靜態庫是否需要與動態庫鏈接?
- 7. 鏈接到靜態庫來構建靜態可執行
- 8. 將動態庫鏈接到鏈接到其他靜態庫的靜態庫
- 9. 在linux上構建靜態C++庫 - 我需要鏈接到其他庫嗎?
- 10. 數學庫是靜態鏈接的嗎?
- 11. 靜態庫鏈接兩次
- 12. 鏈接靜態庫爲R
- 13. 靜態鏈接DCMTK庫
- 14. Qt:庫的靜態鏈接
- 15. 級聯靜態庫鏈接?
- 16. 鏈接到靜態庫
- 17. 對鏈接的靜態庫
- 18. 靜態庫鏈接失敗
- 19. 在另一個靜態庫中鏈接靜態庫
- 20. 鏈接靜態庫,共享另一個靜態庫
- 21. 鏈接第三方靜態庫到另一個靜態庫
- 22. 將靜態庫鏈接到另一個靜態庫
- 23. 鏈接靜態庫與其他靜態庫
- 24. 靜態和動態庫鏈接
- 25. 靜態和動態鏈接庫
- 26. 鏈接動態和靜態庫RCPP
- 27. 靜態鏈接到動態庫。 glibc
- 28. 什麼是靜態庫,靜態鏈接動態庫和動態鏈接動態庫的.lib文件?
- 29. 如何靜態鏈接到另一個項目,該項目本身需要鏈接到其他靜態庫?
- 30. 需要幫助鏈接AOSP中的第三方靜態庫
感謝您的一個很好的答案。但爲什麼這麼難? – 2009-06-20 18:10:13
ELF Statfier加載可執行文件及其所有庫,然後獲取進程內存的快照。當輸出圖像運行時,會導致內存佈局改變的任何事情(例如隨機化的VDSO)將導致錯誤的操作。任何其他方法都需要重新創建動態鏈接器。 – ephemient 2009-06-20 19:00:06