Nie rozumiem -Wl, - rpath -Wl,
Dla wygody dodałem odpowiednie strony Man poniżej.
Moje (błędne)zrozumienie po pierwsze: jeśli muszę oddzielić opcje ,
, oznacza to, że druga -Wl
nie jest inną opcją, ponieważ jest przed ,
, co oznacza, że jest argumentem do opcji -rpath
.
Nie rozumiem jak -rpath
może mieć -Wl,.
argument!
Co miałoby sens w moim umyśle byłoby takie:
-Wl,-rpath .
To powinno wywołać opcję linkera-rpath z argument current directory.
Man gcc:
- WL, opcja
Pass option jako opcja do linker. Jeśli opcja zawiera przecinki, to jest podzielony na wiele opcji w przecinki. Możesz użyć tej składni, aby przekaż argument do opcji. Na przykład,
-Wl,-Map,output.map
przechodzi-Map output.map
do linkera. Kiedy korzystając z linkera GNU, można również uzyskać ten sam efekt z `- WL, - Map=output.Mapa".
Man ld:
-rpath=dir
Dodaj katalog do ścieżka wyszukiwania biblioteki uruchomieniowej. To jest używane podczas łączenia pliku wykonywalnego ELF z obiektami współdzielonymi. All-rpath argumenty są konkatenowane i przekazywane do linkera runtime, który używa ich aby zlokalizować udostępnione obiekty w czasie wykonywania. Opcja-rpath jest również używana, gdy lokalizowanie współdzielonych obiektów, które są wymagane przez obiekty współdzielone jawnie zawarte w linku;
4 answers
Opcja -Wl,xxx
dla gcc przekazuje oddzieloną przecinkami listę tokenów jako oddzieloną spacjami listę argumentów do linkera . Więc
gcc -Wl,aaa,bbb,ccc
W końcu staje się wywołaniem linkera
ld aaa bbb ccc
W Twoim przypadku chcesz powiedzieć " ld -rpath .
", więc przekazujesz to do gcc jako -Wl,-rpath,.
Alternatywnie możesz określić powtarzające się przypadki -Wl
:
gcc -Wl,aaa -Wl,bbb -Wl,ccc
Zauważ, że nie ma przecinka między aaa
a drugim -Wl
.
Lub, w Twoim przypadku, -Wl,-rpath -Wl,.
.
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
2018-03-01 12:51:28
Możesz też napisać
-Wl,-rpath=.
Aby pozbyć się tej nieznośnej przestrzeni. Jest prawdopodobnie bardziej czytelny niż dodawanie dodatkowych przecinków (to dokładnie to, co jest przekazywane do ld).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
2013-03-27 19:21:19
Jeszcze jedno. Może być konieczne podanie opcji-l oraz - np
-Wl,-rpath,/path/to/foo -L/path/to/foo -lbaz
Lub możesz skończyć z błędem jak
ld: cannot find -lbaz
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
2012-03-08 01:46:41
Strona podręcznika jest dość jasna. Jeśli chcesz przekazać dwa argumenty (-rpath
i .
) do linkera możesz napisać
-Wl,-rpath,.
Lub alternatywnie
-Wl,-rpath -Wl,.
Argumenty, które zasugerowałeś, nie mają dla mnie sensu. Skąd gcc ma wiedzieć, że twój drugi argument (.
) ma być przekazany do linkera zamiast być interpretowany normalnie? Jedynym sposobem, aby mógł to wiedzieć, jest posiadanie wiedzy poufnej o wszystkich możliwych łącznikach argumenty, więc wiedział, że -rpath
wymaga argumentu po nim.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
2014-09-30 15:46:10