2

Я использую исполняемый файл Linux, библиотеки расположены во многих местах. Я имею в виду ту же библиотеку с другой версией. Проблема в том, что исполняемый файл забирает исполняемый файл в неправильной библиотеке. Операционная система Ubuntu 64 бит.

Библиотеки находятся в /usr /local /lib и /usr /lib /x86_64-linux-gnu. Я хотел бы, чтобы он использовал /usr /local /lib version.

Чтобы заставить его использовать версию /usr /local /lib. Я скопировал .so оттуда в /usr /lib /x86_64-linux-gnu и удалил .so, на который есть ссылки. В результате программное обеспечение (VLC) не использовало вновь скопированные библиотеки, но оно перестало работать должным образом и не нашло библиотеку вообще. Несмотря на то, что это было там. Так что не ясно, как VLC решает, какую библиотеку использовать.

Понятно, что он использует файлы в /etc/ld.so.conf.d для получения путей к библиотекам. (Файлы содержат /usr /local /lib и /usr /lib /x86_64-linux-gnu) Почему не выбирается библиотека, которую я скопировал в /usr /lib /x86_64-linux-gnu или в /usr /local /lib?

LD_LIBRARY_PATH не установлен.

Обновить:

Я думал, что мог бы просто добавить другую версию, программа использовала бы это, но кажется, что версия библиотеки установлена во время компиляции для данного исполняемого файла. поэтому он не будет использовать новую версию, просто потому что я удаляю старую.

1 ответ1

0

Это может быть достигнуто двумя способами

a) Установка rpath во время соединения - это очень уродливый и непереносимый способ, и его следует избегать везде, где это возможно

б) Использование переменной среды LD_LIBRARY_PATH (не забудьте экспортировать ее, если вы ее измените!)


Если вы хотите использовать конкретную версию / модифицированную / Foo-причину для вашего двоичного файла, я предлагаю

а) ссылаться на него статически, если лицензия позволяет это

б) использовать LD_PRELOAD как описано здесь https://stackoverflow.com/questions/426230/what-is-the-ld-preload-trick

c) измените LD_LIBRARY_PATH (убедитесь, что ваш путь самый первый в этом списке, они ищутся по порядку) с помощью run-script, который делает это

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .