rpath общего объектного файла

rpath исполняемого файла указывает один или несколько каталогов, в которых нужно искать общие объекты во время выполнения.

У меня такой вопрос: сами общие объектные файлы также имеют статически скомпилированные rpath?

Недавно я получил ошибку времени выполнения при связывании с общим объектом:

./example: /opt/swt/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by ./mylib.so)

Эта ошибка указывает мне на то, что собственно сама библиотека - mylib.so, имеет статически скомпилированный файл rpath.

Насколько я понимаю, rpath применяется только к исполняемым файлам, а не к общим объектам. Так относится ли rpath также к общим объектам?


person Siler    schedule 21.05.2015    source источник


Ответы (1)


сами общие объектные файлы также имеют статически скомпилированные rpaths

Они могут (или не могут) в зависимости от того, были ли они связаны с опцией -Wl,-rpath=....

Эта ошибка указывает мне на то, что собственно сама библиотека - mylib.so, имеет статически скомпилированный файл rpath.

В сообщении об ошибке ничего об этом не говорится. Где вы взяли эту идею?

Если вы хотите узнать, есть ли у mylib.so DT_RPATH или нет, сделайте следующее:

readelf -d mylib.so | grep 'R.*PATH'  # could also have RUNPATH

Насколько я понимаю, rpath применяется только к исполняемым файлам, а не к общим объектам. Так относится ли rpath к общим объектам?

Ваше понимание неверно, и RPATHRUNPATH) также работает для общих объектов.

person Employed Russian    schedule 21.05.2015