是否有可能建立一個靜態庫,叫,說,力霸認爲:如何構建可選地使用其他靜態庫的靜態庫?
- 包含在從libB類調用的代碼(不是我創造的,所以我不能修改或訪問);
- 將其編譯到未鏈接到libB的應用程序中(當然,如果使用libB的類的代碼是在沒有libB的情況下調用的,它會崩潰,但我可以解決這個問題,我只需要與libA鏈接的應用程序但不是libB編譯。)?
是否有可能建立一個靜態庫,叫,說,力霸認爲:如何構建可選地使用其他靜態庫的靜態庫?
簡答題,沒有。
靜態引用需要在鏈接時解析 - 這就是靜態鏈接的含義。
你可以做的是建立一個靜態鏈接libB的動態庫,然後動態鏈接它與你的應用程序。如果你更喜歡靜態鏈接,你可以建立一個靜態庫,動態鏈接到你的動態鏈接庫。
有一種方法,但它不具有可移植性,因爲它依賴於所有目標代碼格式不常用的功能。它也可能依賴於知道編譯器的名稱規則。在決定執行此操作之前,請考慮您的其他選項。
您可以在您的庫中爲您引用的每個libB符號包含一個未定義的弱符號。如果您的代碼在最終鏈接步驟中未與libB鏈接,則每個未定義的弱符號都將爲NULL。否則,未定義的弱符號將被來自libB的符號取代。如果您使用GCC,則可以在符號聲明上使用__attribute__((weak))
。
據我所知,父應用程序必須鏈接兩個庫。我很樂意聽到別的。 – Justin 2010-11-09 19:04:28