2011-09-16 88 views
1

我承認這是一個家庭作業問題,詢問這是否可能。我相信答案是肯定的,但我不知道「爲什麼?」這個問題的答案。對我來說,似乎答案只是'爲什麼不是'?......任何人都可以提供一些更深入的見解,說明爲什麼這是真實的(或者如果我錯了,那麼是不真實的)?看起來這個問題只會被問到是否有一個棘手的部分,但從我所瞭解的編譯來看,似乎沒有任何東西會禁止鏈接到兩者。UNIX:將可執行文件鏈接到靜態庫和動態庫?

+0

你會怎麼做?你試過了嗎?它有用嗎? ;-) 祝你好運! – shellter

回答

1

是的,當然你可以鏈接一個靜態庫和一個動態庫。鏈接到一個靜態庫基本上與從檔案中獲取所需的對象文件並將它們包括在鏈接過程中相同。

如果您要鏈接的靜態庫和動態庫是針對庫,則動態鏈接是冗餘的。它仍然被允許完成,但它是沒有意義的(並且只是爲可執行文件引入了不必要的運行時依賴項,至少在Unix上)。

+1

在一些像FreeBSD和Linux這樣的鏈接器符號空間的* nixes上,實際上可能不可能鏈接相同的靜態庫和共享庫。 –

1

通常,應該沒有理由不能鏈接到靜態和動態庫,特別是如果它們不衝突(例如,提供相同的符號)。這樣做的機制會因編譯器而異,但許多免費軟件項目實際上都是這樣做的 - 他們靜態構建所謂的「便利庫」,然後將其鏈接到動態鏈接的可執行文件中。

+0

我想這就是爲什麼我無法回答「爲什麼?」的問題。看起來好像只是因爲沒有理由你不能。 –

+0

@Logan我能想到的最好的答案是鏈接器命令行上的一系列對象(ao bo co)和包含它們的靜態庫(鏈接器的視圖)之間幾乎沒有區別(libfoo.a )。在第一種情況下,顯然您也可以鏈接到共享庫,因此,由於第二種情況幾乎相同,因此您可以將其與共享庫鏈接起來。 –

相關問題