我厭倦了將10個鏈接庫添加到我的項目中,或者需要其中8個使用我自己的鏈接庫。我想使用libpng.a,libz.a,libjpeg.a等現有庫,並將它們合併成一個.a庫。那可能嗎?如何結合.lib庫?如何將幾個C/C++庫合併爲一個?
33
A
回答
8
在Unix等系統上,ld和ar實用程序可以執行此操作。查看http://en.wikipedia.org/wiki/Ar_(Unix)或查看任何Linux機器或通過谷歌的手冊頁,例如'unix man ar'。
請注意,鏈接到共享(動態)庫可能會更好。這會爲您的可執行文件添加依賴項,但會大大減小其大小,特別是在編寫圖形應用程序時。
0
我不知道如何將它們物理地結合成一個文件,但是您可以使用一種排序的抽象,並且只包含一個「AllMyLibs.a/h」,然後包含您想要的所有內容。你也可以把它放到你的編譯器搜索庫的位置,所以它可以用於任何項目。
P.S. - 出於好奇,你爲什麼不喜歡包含單個庫?
23
您可以用
ar x <library name>
提取每個庫的目標文件,然後將它們全部用
ar cs <new library name> <list each extracted object file>
0
也許我誤解,但只有你不合併成一個新的圖書館如果最終用戶代碼直接調用它們,必須運送庫文件?如果所有對Jpeg方法等的訪問都來自您的靜態庫中的代碼,那麼只需將這些庫鏈接到您的lib中。
I.e.
----------------
| End-user exe |
----------------
|
| makes calls to
|
v
--------------------
| Your static lib.a |
--------------------
| makes calls to and links
v
------------------------------------ .....
| | |
------------- -------- ----------
| libjpeg.a | |libz.a| |libpng.a|
------------- -------- ----------
也就是說,它只是一個問題,如果最終的代碼需要直接調用到libz.a,libpng.a等
如果應用程序代碼具有合法的需要調用libz.a,例如,那麼就像上面提到的那樣使用動態模塊。
PS:我有藝術家徽章嗎? :)
-1
將幾個第三方庫合併爲一個可能會給您帶來更多問題 - 例如,如果其中兩個庫定義了您的程序不使用的通用符號。現在,在組合這些庫之前,您必須提取公用符號的所有實例(或全部爲一個)。
3
在Linux或MinGW的或Cygwin的,與GNU工具鏈:
ar -M <<EOM
CREATE libab.a
ADDLIB liba.a
ADDLIB libb.a
SAVE
END
EOM
ranlib libab.a
或者,如果你能保持的liba.a
和libb.a
存在:
ar crsT libab.a liba.a libb.a
在Windows上,與MSVC工具鏈:
lib.exe /OUT:libab.lib liba.lib libb.lib
相關問題
- 1. 如何將幾個mercurial庫合併爲一個?
- 2. 將幾個圖像合併爲一個
- 3. 將幾個sql列合併爲一個
- 4. 將幾個grok合併爲一個
- 5. 將幾行空值合併爲一個
- 6. 如何將幾個SQL查詢合併爲一個
- 7. 如何使用PDF :: API2將幾個pdf合併爲一個Perl?
- 8. MongoDB:如何將兩個集合/數據庫合併爲一個?
- 9. 將幾個查詢合併成一個
- 10. 幾個JavaScript調用合併爲一個
- 11. 將兩個帶幾何列的表合併爲一個
- 12. 將幾個併發的數據庫操作合併爲一個批次
- 13. 如何將倉庫中的倉庫合併爲一個倉庫?
- 14. R- Union將兩個或幾個表合併爲一個
- 15. 如何將幾個select語句合併到一個表中
- 16. 如何將幾個Subversion遠程合併到一個主分支
- 17. 如何將多個數據庫合併爲一個
- 18. 如何將兩個mySQL數據庫合併爲一個?
- 19. 將幾個數據幀合併爲一個數據幀
- 20. 將幾個動態AX報告合併爲一個
- 21. 將幾個Arraylists <String>合併爲一個
- 22. 使用LINQ將幾個列表合併爲一個
- 23. 將兩個幾乎相同的UNIONed查詢合併爲一個
- 24. EF將幾個表合併爲一個IQueryable
- 25. 將幾個註釋合併爲一個字符串
- 26. 將幾個ps/eps數字合併爲一個
- 27. 將幾個文本文件合併爲一個
- 28. 將幾個輸入合併爲一個python
- 29. 將幾個本地DLL合併爲一個DLL
- 30. 將幾個不同的動態AX報告合併爲一個
爲什麼圖形應用程序中的圖像尺寸越小越好? – bigD 2013-12-29 19:15:23
較小的圖像尺寸通常更好。圖形庫(xlib等)往往非常大,所以如果靜態鏈接,可以製作非常大的可執行文件。 – Avner 2013-12-30 06:28:30
哦,所以你的意思是GUI應用程序。我以爲你指的是3D引擎中的圖形與GPU着色器和東西... – bigD 2014-01-01 10:43:25