2011-01-07 471 views
12

我知道-Wl,-sharedld的選項。我見過一些人這樣進行編譯,與GCC選項共享的-shared和-Wl -shared之間的區別

$ gcc -shared -Wl,-soname,libtest.so -o libtest.so *.o 

有些人喜歡這個

$ gcc -Wl,-shared -Wl,-soname,libtest.so -o libtest.so *.o 

所以,我想知道是否有-shared-Wl,-shared有些區別。

謝謝。

回答

11

傳遞-shared與gcc或-shared到ld(經由-Wl)之間的差。向GCC傳遞-shared可以在鏈接時啓用或禁用其他標誌。特別是,可能涉及不同的crt*文件。

想要了解更多的信息,grep for -shared在GCC的gcc/config/目錄和子目錄下。

編輯:舉一個具體的例子:在i386上的FreeBSD,gcc -shared將在目標文件crtendS.o鏈接,而無需-shared,它將在crtend.o鏈接代替。因此,-shared-Wl,-shared不等同。

+1

在當前的gcc的svn主幹中,我在gcc/config/i386/linux.h的第85行發現了以下注釋。 「提供適用於Linux的LINK_SPEC,在這裏我們提供對特殊GCC選項-static和-shared的支持,這些選項允許我們通過在鏈接時應用適當的選項組合來鏈接這三種模式之一。 – 2011-01-08 08:39:13

0

我不認爲有任何區別。 -shared不是gcc的受支持選項,無論您是否使用-Wl指定它,它都會傳遞給鏈接器。 -Wl gcc的選項用於指定將逗號分隔的選項列表傳遞給鏈接器以供進一步處理。

+0

有差異。在我的情況下,項目不會用-Wl進行編譯。 – 2013-10-02 15:53:05