我在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. 從html中刪除特定的鏈接?
- 3. 鏈接塊有:方法=>:刪除
- 4. php從mysql數據庫中刪除鏈接的行
- 5. DotNetNuke中的鏈接模塊
- 6. 從子堆棧中刪除Perl模塊
- 7. 如何從.gitmodules中刪除子模塊
- 8. McAfee從VBA模塊中刪除代碼
- 9. 從鏈接列表中刪除數據
- 10. 從Scrapy爬行中刪除「#」鏈接
- 11. 從鏈接列表中刪除元素
- 12. 從鏈接中刪除圖像CSS
- 13. 從Outlook中刪除html超鏈接URL
- 14. 從鏈接列表中刪除
- 15. 從鏈接列表中刪除項目
- 16. 從鏈接中刪除文字修飾
- 17. 從鏈接列表中刪除節點
- 18. 從短代碼中刪除超鏈接
- 19. 如何從UIWebView中刪除鏈接?
- 20. 從鏈接服務器中刪除
- 21. 如何從鏈接列表中刪除?
- 22. 從鏈接中刪除字符串href
- 23. 從文本中刪除超鏈接
- 24. 從鏈接列表中刪除元素
- 25. 從文章中刪除「prev」鏈接
- 26. 怎麼做刪除鏈接軌與模塊
- 27. 使用_GET URL鏈接從mysql數據庫中刪除記錄
- 28. backbone.js從數據庫刪除模型從視圖中刪除
- 29. 從頭像鏈接中刪除gravatar鏈接Wordpress
- 30. 如何從鏈接列表中刪除「#」鏈接
這個問題有點難以遵循。如果將'A.cpp'和'B.cpp'編譯爲一個靜態庫,則不僅可以鏈接該庫的一部分。如果是這樣的話,你需要實現兩個靜態庫,每個模塊一個。 – Chad