RPATH должен существовать во время компиляции

Пожалуйста, простите меня, если я упустил что-то очевидное здесь. Я разрабатываю некоторые приложения для другой платформы, и все мои проприетарные библиотеки установлены в /app/lib. Чтобы облегчить это, я указываю путь к библиотеке времени выполнения для каждого из моих двоичных файлов как «/app/lib». Это отлично работает; однако для этого требуется, чтобы путь «/app/lib» существовал в моей среде сборки при связывании (даже если этот каталог пуст). Я использую NetBeans, что может усложнять ситуацию, но я вижу, что "-Wl, -rpath /app/lib" передается в gcc.

Я хотел бы избежать необходимости создавать пустой «/app/lib» в моей среде сборки, но я не хочу менять файловую структуру на моей целевой платформе. Если я удаляю /app/lib из среды сборки, я получаю сообщение об ошибке при сборке, что его невозможно найти. Есть ли способ указать путь поиска во время выполнения без необходимости его существования во время компоновки?


person LousyG    schedule 03.04.2012    source источник
comment
-Wl, -rpath /app/lib — неправильная спецификация параметра, должно быть -Wl,-rpath -Wl,/app/lib (возможно, есть и другие способы, но это работает и не требует каталога на хосте сборки). Вы неправильно скопировали свой вариант сборки здесь?   -  person Mat    schedule 03.04.2012
comment
Я вернулся и дважды проверил, но я подтвердил, что вызов создается как gcc -o ... -Wl,-rpath /app/lib .... NetBeans создает этот make-файл, поэтому, если он недействителен, он может потребоваться исправление с их стороны. Однако процесс сборки завершается успешно, если в моей среде сборки существует каталог /app/lib, а полученный двоичный файл использует путь во время выполнения.   -  person LousyG    schedule 03.04.2012
comment
Странно... Я думал, что это не сработало. Я посмотрю, смогу ли я воспроизвести позже, кажется немного странным.   -  person Mat    schedule 03.04.2012
comment
Mat совершенно прав, синтаксис должен быть -Wl,-rpath -Wl,/app/lib (-Wl,-rpath,/app/lib тоже работает). Это ошибка в NetBeans. Причина, по которой это не является более важным (и почему я не замечал этого раньше), заключается в том, что пути поиска во время компоновки, по-видимому, переносятся во время выполнения. Поскольку NetBeans не ставит запятую между -rpath и /app/lib, /app/lib интерпретируется как путь поиска во время компоновки. В результате мои зависимые библиотеки по-прежнему находятся во время выполнения в соответствующем месте, но поскольку это зависимость во время компоновки, компоновка завершается ошибкой, поскольку /app/lib не существует.   -  person LousyG    schedule 03.04.2012
comment
Мэт, если ты хочешь опубликовать свой комментарий в качестве ответа, я воздам тебе должное. Большое вам спасибо за вашу помощь!   -  person LousyG    schedule 03.04.2012
comment
И для всех, кто заинтересован в отслеживании этой проблемы, вот ссылка на ошибку NetBeans, которую я создал: netbeans.org/bugzilla/show_bug.cgi?id=210642   -  person LousyG    schedule 03.04.2012


Ответы (2)


Я думаю, что вариант, который вы ищете, это -Wl,-rpath-link,/path/to/libraries. Вам нужно использовать оба варианта одновременно.

Затем компоновщик будет использовать -rpath-link для поиска библиотек во время компоновки, но он будет кодировать значение -rpath в двоичный файл для использования во время выполнения.

person ams    schedule 04.04.2012

Синтаксис должен быть "-Wl,-rpath -Wl,/app/lib" ("-Wl,-rpath,/app/lib" тоже работает). Это ошибка в NetBeans. Причина, по которой это не является более важным (и почему я не замечал этого раньше), заключается в том, что пути поиска во время компоновки, по-видимому, переносятся во время выполнения. Поскольку NetBeans не ставит запятую между -rpath и /app/lib, /app/lib интерпретируется как путь поиска во время компоновки. В результате мои зависимые библиотеки по-прежнему находятся во время выполнения в соответствующем месте, но поскольку это зависимость во время компоновки, компоновка завершается ошибкой, поскольку /app/lib не существует.

person LousyG    schedule 22.05.2012