[英]Building a library with undefined symbols (C++)
對於 C++ 中的項目/產品,我有以下線性依賴樹:
Product <- C <- B <- A
A, B
和C
分別構建。 A,B
和C
鏈接在最終Product
,並且工作正常。
現在,當我用 nm 檢查例如C
時:
http://linux.about.com/library/cmd/blcmdl1_nm.htm
自從我第一次組裝所需的依賴樹鏈接在一起的Product
以來,我得到了一堆未定義的符號。
是否有任何約定,lib 必須始終定義其所有符號(意味着在部署之前必須將依賴項鏈接到使用 lib 中)? 或者在更高級別部署與其依賴項鏈接在一起的“裸”庫是否可以接受?
來自 Windows 世界:
我見過在公司內部使用過的。 將代碼庫分成幾個靜態庫,並根據每個產品的需要以不同的組合將它們鏈接在一起。
我也在公共 SDK 中看到了它,其中的功能在幾個 DLL 之間划分,其中一些相互依賴,其他是可選的,具體取決於您需要什么功能。
對我來說這似乎並不奇怪。
我也看到了。 這發生在許多遺留軟件中。 該庫在開始時可能設計得很好,然后后來制作了一些軟件模塊,事情變得有點草率。 這一切都可以編譯和運行,但這些庫並沒有完全封裝它們最初所做的任何一組功能。
這是一個商業決策。 要修復它,可能需要大量的工作和重新測試才能最終得到相同的產品。 隨着時間的推移,在有意義的地方慢慢重構庫會更有意義……或者在下一個主要功能版本影響庫時完全替換它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.