1

是否有可能建立一個靜態庫,叫,說,力霸認爲:如何構建可選地使用其他靜態庫的靜態庫?

  1. 包含在從libB類調用的代碼(不是我創造的,所以我不能修改或訪問);
  2. 將其編譯到未鏈接到libB的應用程序中(當然,如果使用libB的類的代碼是在沒有libB的情況下調用的,它會崩潰,但我可以解決這個問題,我只需要與libA鏈接的應用程序但不是libB編譯。)?
+2

據我所知,父應用程序必須鏈接兩個庫。我很樂意聽到別的。 – Justin 2010-11-09 19:04:28

回答

1

簡答題,沒有。

靜態引用需要在鏈接時解析 - 這就是靜態鏈接的含義。

你可以做的是建立一個靜態鏈接libB的動態庫,然後動態鏈接它與你的應用程序。如果你更喜歡靜態鏈接,你可以建立一個靜態庫,動態鏈接到你的動態鏈接庫。

0

有一種方法,但它不具有可移植性,因爲它依賴於所有目標代碼格式不常用的功能。它也可能依賴於知道編譯器的名稱規則。在決定執行此操作之前,請考慮您的其他選項。

您可以在您的庫中爲您引用的每個libB符號包含一個未定義的弱符號。如果您的代碼在最終鏈接步驟中未與libB鏈接,則每個未定義的弱符號都將爲NULL。否則,未定義的弱符號將被來自libB的符號取代。如果您使用GCC,則可以在符號聲明上使用__attribute__((weak))