2010-02-08 39 views
0

這是一個我反覆遇到的問題,通常涉及到插件,但最近我遇到它試圖找出一些構建系統問題。我的關注主要是基於* nix的系統,但我想它也適用於windows。執行(動態)鏈接所需的最小信息量?

問題是,動態鏈接所需的最小信息量是多少?我知道像Debian這樣的Linux發行版只有'i686',這足夠了。不過,我想這裏有一些隱含的信息,只要它們使用-march=i686進行編譯,我可能無法動態鏈接任何共享對象,對嗎?

那麼爲了能夠成功加載共享對象,必須正確匹配什麼?我知道對於C++來說,即使編譯器(有時候是版本)也必須匹配,因爲名稱會變形,但我希望c不是這種情況。

任何想法讚賞。

編輯
尼爾的回答讓我意識到我真的不談論動態鏈接,或者更確切地說,問題是雙重的,

  1. 什麼需要靜態鏈接,並
  2. 動態鏈接需要什麼

我對第一個猜測有更高的期望。

回答

2

至少,代碼必須已經編譯爲同一處理器系列,並且您需要知道庫和函數的名稱。最重要的是,你需要相同的ABI。您應該意識到,儘管人們認爲C標準沒有指定ABI,並且兩個C編譯器(或相同編譯器的版本)完全可以遵循該標準,但可以在同一平臺上運行,但具有不同的ABI的。

至於確切指定架構細節 - 我必須承認我從來沒有做過。你打算在不同的Linux變體上分發二進制庫嗎?

+0

我目前正在考慮的是一個構建系統,我可以共享構建結果,而不必每次編譯所有內容,這裏需要爲每個屬性組合編譯一個庫在這裏,像i686 linux,sparc solaris和專有的基於ppc的平臺,這樣每個開發人員都可以簡單地將他們的工作鏈接到這些預先構建的庫。 – falstro 2010-02-08 15:04:22

+0

正如我憎惡首字母縮略詞,我在這裏添加它來澄清其他人:ABI是應用程序二進制接口。請參閱:http://en.wikipedia.org/wiki/Application_binary_interface – 2010-02-08 22:59:39