2011-01-07 8 views
12

Wiem, że -Wl,-shared jest opcją ld. Widziałem kilka osób skompilować tak,Różnica między -shared i -Wl, -shared opcji GCC

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

A niektóre osoby jak ten

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

Tak, chcę wiedzieć, czy jest jakaś różnica między -shared i -Wl,-shared.

Dzięki.

Odpowiedz

11

nie jest różnica między przechodzącą -shared gcc lub -shared LD (przez -Wl). Przekazanie -shared do GCC może włączyć lub wyłączyć inne flagi w czasie połączenia. W szczególności mogą być zaangażowane różne pliki crt*.

Aby uzyskać więcej informacji, grep dla -shared w katalogu i podkatalogach GCC gcc/config/.

Edit: Aby dać konkretny przykład: na i386 FreeBSD gcc -shared będzie link do pliku obiektowego crtendS.o, natomiast bez -shared, to odwołuje się crtend.o zamiast. Tak więc, -shared i -Wl,-shared nie są równoważne.

+1

W aktualnym pniu svn gcc znalazłem następujące komentarze w linii 85 w gcc/config/i386/linux.h. "Zapewnij LINK_SPEC odpowiednie dla Linuksa. Tutaj zapewniamy wsparcie dla specjalnych opcji GCC -static i -shared, które pozwalają nam łączyć rzeczy w jednym z tych trzech trybów, stosując odpowiednie kombinacje opcji w czasie linku." –

+0

Witam, FX, czy mógłbyś podać bardziej konkretne wyjaśnienie? Dzięki. –

0

Nie sądzę, że jest jakakolwiek różnica. -shared nie jest obsługiwaną opcją gcc i jest przekazywana do łącznika bez względu na to, czy została określona jako -Wl, czy nie. -Wl Opcja gcc służy do określenia, że ​​rozdzielona przecinkami lista opcji ma zostać przekazana do linkera w celu dalszego przetwarzania.

+0

Istnieje różnica. W moim przypadku projekt nie skompiluje się z opcją -Wl. –

Powiązane problemy