можно ли подавить пользовательские библиотеки из системных библиотек в linux

Я создаю приложение, которое использует предварительно скомпилированные сторонние файлы общей библиотеки. Чтобы использовать их, мне необходимо установить LD_LIBRARY_PATH или создать файл conf в /etc/ld.so.conf.d/application.conf Моя проблема в том, что существует системная libcurl.so.4, уже доступная в /usr/lib/. В сторонней библиотеке также есть libcurl.so.4. Если я создам файл /etc/ld.so.conf.d/application.conf, я не смогу использовать «Установщик YUM». я получаю сообщение об ошибке

Pycurl error occured ,

Compile time Version is higher than the Linking version

Я беспокоюсь об удалении приложения libcurl.so.4, поскольку оно может нарушить функции той сторонней библиотеки, которую я использую (что делает мое приложение менее значимым), и я также не могу пренебрегать системной библиотекой.

Можно ли использовать эти две библиотеки без каких-либо конфликтов, как я упоминал выше.

PS: установка LD_LIBRARY_PATH тоже вызывает ту же проблему


person Thiyagarajan    schedule 29.11.2013    source источник


Ответы (2)


Создайте сценарий, который устанавливает и экспортирует $LD_LIBRARY_PATH перед вызовом исполняемого файла. Переменная исчезнет после выхода скрипта.

person Ignacio Vazquez-Abrams    schedule 29.11.2013
comment
Игнасио Васкес-Абрамс. Я пробовал это раньше, прежде чем решил создать файл conf в etc/ld .so.conf.d/. Проблема, с которой я столкнулся, заключается в том, что сценарий оболочки экспортирует путь к дочерней оболочке, и в текущей оболочке это не имело никакого эффекта, вот как я его использовал: - person Thiyagarajan; 29.11.2013
comment
Зачем это нужно текущей оболочке? Скрипт вызывает исполняемый файл. - person Ignacio Vazquez-Abrams; 29.11.2013
comment
Как вы сказали, сценарий выполняет исполняемый файл, но команда экспорта, если она используется как таковая, не будет экспортировать команду в оболочку, в которой был вызван исполняемый файл. /bash-script-to-set-environment-variables-not-working">эта страница. поскольку это предполагает, что я не могу использовать исходный код или файл . для запуска сценария оболочки при запуске системы (насколько мне известно, поправьте меня, если я ошибаюсь). - person Thiyagarajan; 29.11.2013
comment
. Скрипт. Является. Вызов. . Исполняемый. export LD_LIBRARY_PATH="$PWD" ./someexecutablewithprivatelibraries - person Ignacio Vazquez-Abrams; 29.11.2013
comment
Извините, что ввел вас в заблуждение. Сценарий используется для выполнения исполняемого файла. Если путь не указан правильно, исполняемый файл не работает.. как вы сказали. или источник перед ./someexecutablewithprivatelibraries для работы команды экспорта, которая мне не помогает.. - person Thiyagarajan; 29.11.2013

Если у вас есть две конфликтующие библиотеки, одна из которых является системной, а другая — пользовательским приложением, не помещайте application.conf в /etc/ld.so.conf.d/. Вместо этого используйте что-то вроде ~your_user_name/custom_conf , поместите туда свой файл application.conf (в конце концов вам может понадобиться отредактировать его, добавив путь к правильной версии libcurl.so.4). libcurl.so.4 также должен находиться не в системных каталогах, а в ~your_user_name/lib. Вы можете создать оболочку для своего приложения, где вы установите $LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~your_user_name/lib, как предложил Игнасио Васкес-Абрамс, или скомпилируйте свое приложение, явно указав, какую библиотеку связать (используйте флаги компоновщика -L /full/path/to/your/libcurl.so.4)

person cur4so    schedule 30.11.2013