我在Visual Studio中創建了lib。 Lib有兩個模塊:A.cpp和B.cpp。 在單獨的項目中,我鏈接到這個庫,但我想禁用此lib的模塊之一,即B.cpp。從鏈接中刪除庫的模塊
0
A
回答
1
你可能不需要拆分你的lib。
只有當您的可執行文件(exe/dll)還有未解析的符號時,纔會鏈接lib的必需內容。 不必要的內容一般地講不掛
例如:
假設你的lib目錄包含有2 OBJ-文件,A.OBJ從a.cpp和B.OBJ從b .cpp。等等
a.cpp包含調用函數void b(int j).
b.cpp包含函數void b(int j)
功能void a(int i)
。
並假設你的可執行文件中的源文件,一個包含一個函數
void b(int k)
的執行情況和其他一些一段代碼,你必須void a(int)
通話。
當您鏈接到lib時,鏈接器在一個階段留下1個未解析的符號(即調用函數void a(int)
)。它將搜索您爲第一次出現此類函數簽名而指定的庫,以及因爲你的可執行代碼已經包含執行void b(int)
它不需要搜索任何庫來解決它在a.obj中的調用,所以b.obj不會被鏈接。
總結(非常簡化):
只要你不直接或間接地調用\使用b.obj中的任何東西,它將不會被鏈接(除非在鏈接cmd中指定一個lib爲OBJ = YourLib.lib,這會引入整個庫)。
如果您直接或間接調用b.obj中實現的東西,並在可執行文件中實現這些符號(函數或全局變量),那麼b.obj的這些部分將不會鏈接到功能級鏈接指定),否則如果您忘記了某些內容,將會出現重複的符號鏈接錯誤。
0
將項目拆分爲兩部分,其中一部分包含A.cpp
,另一部分包含B.cpp
。然後,如果您需要鏈接到兩個.cpp
文件,則必須鏈接到兩個.lib
文件。但是如果你想鏈接到一個,那麼你可以這樣做。
相關問題
- 1. 從drupal7數據庫中刪除模塊
- 2. 從libxml2中刪除模塊
- 3. 刪除?從鏈接
- 4. 從GPS鏈接到Ubuntu .a模塊庫?
- 5. 如何從Wordpress中的所有圖庫中刪除鏈接?
- 6. 從html中刪除特定的鏈接?
- 7. 從鏈接刪除mysql行
- 8. 刪除前端從鏈接
- 9. 刪除鏈接列表中的鏈接
- 10. 在.Doc中刪除模板鏈接
- 11. 如何從HTML塊中刪除鏈接及其文本?
- 12. 如何從我的github存儲庫中刪除子模塊?
- 13. 如何從Orchard數據庫中刪除模塊的數據?
- 14. 鏈接塊有:方法=>:刪除
- 15. DotNetNuke中的鏈接模塊
- 16. 如何從MySQL數據庫中刪除兩個鏈接的行?
- 17. php從mysql數據庫中刪除鏈接的行
- 18. 鏈接內核模塊的靜態庫
- 19. 模塊友好的網址,如何從url中刪除模塊?
- 20. 從子堆棧中刪除Perl模塊
- 21. McAfee從VBA模塊中刪除代碼
- 22. 如何從CPAN中刪除模塊?
- 23. 如何從.gitmodules中刪除子模塊
- 24. 從文章中刪除「prev」鏈接
- 25. 從鏈接列表中刪除節點
- 26. Symfony 2從鏈接中刪除app.php
- 27. 從ASP.NET項目中刪除鏈接
- 28. 從鏈接列表中刪除節點
- 29. 從鏈接列表中刪除元素
- 30. 從鏈接中刪除字符串href
這個問題有點難以遵循。如果將'A.cpp'和'B.cpp'編譯爲一個靜態庫,則不僅可以鏈接該庫的一部分。如果是這樣的話,你需要實現兩個靜態庫,每個模塊一個。 – Chad