Для удобства я добавил соответствующие страницы ниже.
Мой (MIS) понимание первое: Если мне нужно отделить варианты с ,
, что означает , что второй -Wl
не другой вариант , потому что речь идет , прежде чем ,
это означает , что это аргумент -rpath
опцию.
Я не понимаю, как -rpath
можно -Wl,.
поспорить!
Что бы иметь смысл в моем уме было бы так:
-Wl,-rpath .
Это должно вызвать опцию -rpath linker с текущим аргументом каталога.
man gcc:
-Wl, вариант
Опция передачи в качестве опции для компоновщика. Если опция содержит запятые, она разделяется на несколько опций через запятую. Вы можете использовать этот синтаксис для передачи аргумента опции. Например,
-Wl,-Map,output.map
переходит-Map output.map
на компоновщик. При использовании компоновщика GNU вы также можете получить тот же эффект с помощью `-Wl, -Map = output.map '.
человек лд:
-rpath = каталог
Добавьте каталог в путь поиска библиотеки времени выполнения. Это используется при связывании исполняемого файла ELF с общими объектами. Все аргументы -rpath объединяются и передаются компоновщику среды выполнения, который использует их для поиска общих объектов во время выполнения. Опция -rpath также используется при поиске общих объектов, которые необходимы для общих объектов, явно включенных в ссылку;
Ответы:
-Wl,xxx
Вариант для GCC проходит через запятую список токенов в качестве разделенных пробелами список аргументов линкера . Такв конечном итоге становится вызовом компоновщика
В вашем случае вы хотите сказать «
ld -rpath .
», так что вы передаете это в gcc как-Wl,-rpath,.
В качестве альтернативы, вы можете указать повторные экземпляры-Wl
:Обратите внимание, что между
aaa
и вторым нет запятой-Wl
.Или, в вашем случае
-Wl,-rpath -Wl,.
.источник
-Wl,-rpath,.
либо говорите-Wl,-rpath -Wl,.
. Точно один из двух, вы ничего не можете опустить.-Wl,-rpath -Wl,. -Wl,-rpath -Wl,/my/lib
?-Wl,-rpath,dir1,-rpath,dir2
, или-Wl,-rpath=dir1,-rpath=dir2
.Вы могли бы также написать
Чтобы избавиться от этого надоедливого пространства. Это, возможно, более читабельно, чем добавление дополнительных запятых (это именно то, что передается в ld).
источник
-Wl,option
: « Используя компоновщик GNU , вы также можете получить тот же эффект с -Wl, -Map = output.map.» Мне кажется, это указывает на то, что если вы используете компоновщик, отличный от компоновщика GNU,=
синтаксис может не поддерживаться.Еще одна вещь. Вы , возможно , потребуется указать опцию -L , а также - например ,
или вы можете получить ошибку вроде
источник
Справочная страница проясняет это. Если вы хотите передать два аргумента (
-rpath
и.
) компоновщику, вы можете написатьили альтернативно
Аргументы, которые
-Wl,-rpath .
вы предложили, НЕ имеют смысла для меня. Как gcc должен знать, что ваш второй аргумент (.
) должен передаваться компоновщику, а не интерпретироваться нормально? Единственный способ узнать это - это если бы он знал все возможные аргументы компоновщика, чтобы он знал, что-rpath
после него требуется аргумент.источник