LINUX.ORG.RU

rpath для линкера и цепочки зависимостей

 , ,


1

3

Есть либы и прога со следующими зависимостями:

A.so -> B.so -> C.elf

Собирается в отдельный каталог:

./bin
 +- A.so.1.1.115
 +- A.so.1.1 (link)
 +- A.so.1 (link)
 +- A.so (link)
 +- B.so.1.0.45
 +- B.so.1.0 (link)
 +- B.so.1 (link)
 +- B.so (link)
 +- C.elf

Запускается через LD_LIBRARY_PATH=. ./C.elf

Хочу чтобы в каталоге можно было иметь только A.so.1.1.115, B.so.1.0.45 и C.elf. и чтобы запускать через ./C.elf без переменной окружения.

Симлинки делаю руками. Библиотеки все мои, собираю одновременно с прожкой. Можно попросить линкер линковать на *.so.1.*.* и чтобы там разгреблась рекурсивная зависимость и чтобы запускать без переменной окружения?

И да, хочу относительные пути. Чтобы перенес на другую машину каталог bin хоть в /opt хоть в /tmp и все заработало



Последнее исправление: someoneelsenotme (всего исправлений: 1)

Так с -rpath не работает в этом случае или что? Какая проблема то?

xaizek ★★★★★
()

Тебе нужно собирать релизный исполняемый файл как-то так: -rpath $ORIGIN. $ORIGIN это не переменная окружения, знак доллара должен попасть через командную строку в сам эльф.

Dendy ★★★★★
()
Последнее исправление: Dendy (всего исправлений: 1)

И да, я догадываюсь, что симлинки ты сам делаешь потому что A.so.1.1 собрался с опцией -soname A, поэтому загрузчик C.elf ищет A.so. readelf -d C.elf откроет завесу тайны. Собственно, поправь -soname или вообще его убери.

Dendy ★★★★★
()
g++ -c -L/<чо-то.где-то>/lib -Wl,-rpath,/<чо-то/где-то>/lib -ltestr 
/<чо-то.где-то>/ - имя каталога или симлинка на каталог с таким же именем.
TomBOY ★★
()
Ответ на: комментарий от TomBOY

Подозреваю, что он так и делает. Тут дьявол в деталях, ему нужно прочитать про $ORIGIN, чтобы переносить результат на другую машину и про -soname, чтобы избавиться от симлинков.

Dendy ★★★★★
()
Ответ на: комментарий от someoneelsenotme

readelf -d C.elf

Смотреть что именно будет искать загрузчик для этого исполняемого файла. Там должны быть A.so.1.1. Если нет, то убедиться, что при линковке подставляется полное название файла.

Dendy ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.