У меня есть несколько сборок приложения в моей системе (сборка dev и много более старых выпущенных сборок). Когда я пытаюсь запустить более раннюю версию, система неизменно выбирает динамические библиотеки из сборки dev.
Из /home/franz/Projects/appleseed/archives/releases/1.1.0-alpha-14-0-g4e46ed9/appleseed/bin
, который является каталогом более ранней версии, которую я пытаюсь запустить:
$ ldd appleseed.studio
[stuff omitted]
libappleseed.so => /home/franz/Projects/appleseed/build/linux-gcc4/appleseed/libappleseed.so (0x00007fbcb090b000)
libappleseed.shared.so => /home/franz/Projects/appleseed/build/linux-gcc4/appleseed.shared/libappleseed.shared.so (0x00007fbcb030c000)
[more stuff omitted]
(/home/franz/Projects/appleseed/build/linux-gcc4/appleseed/
- это путь к моей сборке dev.)
Естественно, я должен правильно установить LD_LIBRARY_PATH
перед запуском более ранней версии:
$ export LD_LIBRARY_PATH=/home/franz/Projects/appleseed/archives/releases/1.1.0-alpha-14-0-g4e46ed9/appleseed/bin ; ./appleseed.studio
(LD_LIBRARY_PATH
изначально пуст, поэтому я не беспокоюсь о конкатенации.)
Однако это не ' и система продолжает собирать динамическую библиотеку dev.
1112 Я что-то не так делаю? Есть идеи?
Я использую 64-битную сборку Ubuntu 10.10 Maverick Meerkat (по состоянию на апрель 2012 года не поддерживается).
ОБНОВЛЕНИЕ: я обновил свою систему до Ubuntu 11.10 (Natty), и проблема сохраняется.
Убедитесь, что в разделе
/home/franz/Projects/appleseed/archives/releases/1.1.0-alpha-14-0-g4e46ed9/appleseed/bin
у вас действительно есть общие библиотеки, которые вы хотите загрузить. Они действительно находятся в каталоге bin/
архива? Не lib/
?
Попробуйте
/lib/ld-linux.so.2 --library-path /home/franz/Projects/appleseed/archives/releases/1.1.0-alpha-14-0-g4e46ed9/appleseed/bin ./appleseed.studio
Вы можете использовать опции из этой программы для управления и отладки процесса загрузки библиотеки.
Для 64 битов/usr/bin/ld-> x86_64-linux-gnu-ld является загрузчиком, не 32 бита/lib/ld-linux.so.2-> i386-linux-gnu/ld-2.27.so. Загрузчик номера 32 битов необходим для этого.
команда ldd указывает, что общие библиотеки, которыми она пользуется, находятся в.../appleseed и.../appleseed.shared. Добавление нового места для необходимых библиотек (.../мусорное ведро) не изменит это, ни возьмет библиотеки в.../мусорное ведро. Вопрос, который остается, состоит в том, как ldd берет эти библиотеки, если они не находятся в стандартном месте, ни в LD_LIBRARY_PATH. Я начал бы работу, как исполняемый файл был связан, Вы, возможно, дали полный путь на необходимых библиотеках и не полагаетесь просто на имя, нуждаясь в ряде мест для сканирования, какой LD_LIBRARY_PATH обеспечил бы.