Polecenie gcc bezpośredniego połączenia biblioteki statycznie
Wydaje mi się dziwne używanie -Wl,-Bstatic
, aby powiedzieć gcc
, z którymi bibliotekami chcę się połączyć statycznie. W końcu mówię gcc
bezpośrednio wszystkie inne informacje o linkowaniu z bibliotekami (-Ldir
, -llibname
).
Czy można bezpośrednio powiedzieć sterownikowi gcc, które biblioteki powinny być połączone statycznie?
Wyjaśnienie: wiem, że jeśli pewna biblioteka istnieje tylko w wersjach statycznych, to będzie używać jej Bez -Wl,-Bstatic
, ale chcę zasugerować gcc
, aby preferować biblioteka statyczna. Wiem też, że podanie pliku biblioteki bezpośrednio połączyłoby się z nim, ale wolę zachować semantyczny dla włączania bibliotek statycznych i dynamicznych.
2 answers
Jest oczywiście możliwe użycie -l:
zamiast -l
. Na przykład -l:libXYZ.a
aby połączyć się z libXYZ.a
. Zwróć uwagę na lib
wypisane, w przeciwieństwie do -lXYZ
, które automatycznie rozszerzyłyby się do libXYZ
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-17 07:43:57
Możesz dodać .plik w poleceniu linkowania:
gcc yourfiles /path/to/library/libLIBRARY.a
Ale to nie jest rozmowa ze sterownikiem gcc, ale z ld
linkerem jak opcje takie jak -Wl,anything
są.
Kiedy powiesz gcc lub ld "- Ldir-lLIBRARY", linker sprawdzi zarówno statyczne, jak i dynamiczne wersje biblioteki (możesz zobaczyć proces za pomocą -Wl,--verbose
). Aby zmienić kolejność zaznaczonych typów bibliotek można użyć -Wl,-Bstatic
i -Wl,-Bdynamic
. Oto strona podręcznika gnu LD: http://linux.die.net/man/1/ld
Aby połączyć swój program z lib1, lib3 dynamicznie i lib2 statycznie, użyj takiego wywołania gcc:
gcc program.o -llib1 -Wl,-Bstatic -llib2 -Wl,-Bdynamic -llib3
Zakładając, że domyślnym ustawieniem ld jest użycie bibliotek dynamicznych (jest to w Linuksie).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-05 06:23:59