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.

Author: Elazar Leibovich, 2011-07-05

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.

 104
Author: Radek,
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).

 100
Author: osgx,
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