RPATH должен существовать во время компиляции - PullRequest
1 голос
/ 03 апреля 2012

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

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

Ответы [ 2 ]

1 голос
/ 22 мая 2012

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

1 голос
/ 04 апреля 2012

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

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

...