Я не понимаю-Wl, - rpath-Wl,



для удобства я добавил соответствующие страницы ниже.



мое (mis)понимание сначала: если мне нужно разделить параметры с ,, это означает, что второй -Wl это не другой вариант, потому что он приходит перед , что означает, что это аргумент для .



Я не понимаю, как -rpath может быть

715   4  

4 ответов:

The на gcc передает разделенный запятыми список маркеров как разделенный пробелом список аргументов в линкер. Так что

gcc -Wl,aaa,bbb,ccc

в конечном итоге становится вызов компоновщика

ld aaa bbb ccc

в вашем случае, вы хотите сказать,"ld -rpath .", поэтому вы передаете это в gcc как -Wl,-rpath,. кроме того, вы можете указать повторяющиеся экземпляры -Wl:

gcc -Wl,aaa -Wl,bbb -Wl,ccc

обратите внимание, что между aaa и второй -Wl.

или, в вашем случае, -Wl,-rpath -Wl,..

вы можете также написать

-Wl,-rpath=.

чтобы избавиться от этого надоедливого пространства. Это, возможно, более читабельно, чем добавление дополнительных запятых (это именно то, что передается ld).

еще одна вещь. Возможно, Вам потребуется указать параметр-L а также - например,

-Wl,-rpath,/path/to/foo -L/path/to/foo -lbaz

или вы можете в конечном итоге с ошибкой, как

ld: cannot find -lbaz

страница man делает это довольно ясно. Если вы хотите передать два аргумента (-rpath и .) в линкер можно написать

-Wl,-rpath,.

или

-Wl,-rpath -Wl,.

доводы -Wl,-rpath . вы предложили, не имеет смысла на мой взгляд. Как gcc должен знать, что ваш второй аргумент (.) должен быть передан компоновщику вместо того, чтобы интерпретироваться нормально? Единственный способ, которым он мог бы это знать, - это если бы он имел инсайдерское знание все возможные аргументы компоновщика, чтобы он знал, что -rpath требуется аргумент после него.

Comments

    Ничего не найдено.