2012-04-03 2 views
1

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

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

+1

'-Wl, -rpath/app/lib' является неправильной опцией spec, должен быть' -Wl, -rpath -Wl,/app/lib' (возможно, есть и другие способы, но это работает и не работает требуйте директорию на хосте сборки). Вы неправильно скопировали свой вариант сборки здесь? – Mat

+0

Я вернулся и дважды проверял, но я подтвердил, что вызов строится как «gcc -o ... -Wl, -rpath/app/lib ...». NetBeans создает этот make-файл, поэтому, если он недействителен, может потребоваться исправление на их конце. Тем не менее, процесс сборки делает успешным, если/app/lib существует в моей среде сборки, а полученный двоичный файл использует путь во время выполнения. – LousyG

+0

Странно ... Я, хотя это не сработало. Я посмотрю, смогу ли я воспроизвести его позже, кажется немного странным. – Mat

ответ

1

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

1

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

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

Смежные вопросы