как использовать старые системные библиотеки

У нас есть проект и общие библиотеки libprivate.so (частные), в которых использовались старые библиотеки libcurl.so.3. В систему добавлены новые системные библиотеки libcurl.so.4.

Из-за некоторых внутренних проблем прямо сейчас мы не хотим использовать последние библиотеки libcurl.so.4, мы хотим использовать libcurl.so.3.

Поэтому я скопировал libcurl.so.3 в локальную папку и соответственно установил LD_LIBRARY_PATH. Когда я связываю весь свой проект, он говорит, что существует конфликт версий между libcurl.so.4 и libcurl.so.3, требуется libprivate.so (libprivate.so давно скомпилирован с libcurl.3.so).

Должен ли я не беспокоиться об этом предупреждении и продолжать дальше?

Когда я правильно указываю LD_LIBRARY_PATH, в котором есть libcurl.so.3, почему он берется из системного каталога /usr/lib64/libcurl.so.4? когда я делаю ldd my_binary, он берется из libcurl.so.4. Как мне это остановить? Указание -L с конкретным местоположением также не работает. Модификация /etc/ld.conf подойдет для всей системы. Я хочу сделать это, когда запустил свой проект.

Указание явного пути работает как /home/mydir/libcurl.so.3, но я не хочу этого делать.

Я хочу иметь эти условия только при выполнении своего проекта. В других случаях он может использовать последние библиотеки.

Спасибо за вашу помощь


person Jegan    schedule 10.03.2014    source источник
comment
Может ли быть зависимость от libcurl.so.4 из другой библиотеки? Вы можете использовать tldd, чтобы узнать, откуда берется зависимость библиотеки. Если это не из другой библиотеки, покажите всю команду компоновщика.   -  person Jonathan Wakely    schedule 10.03.2014
comment
У меня было простое тестирование. Вот команда для компиляции и компоновки gcc test.c -L~/lib/x86_64/ -lcurl -o test. Я также установил LD_LIBRARY_PATH в ~/lib/x86_64. Но когда я выполняю тест ldd, он говорит, что /usr/lib64/libcurl.so.4   -  person Jegan    schedule 10.03.2014
comment
Я ожидаю выбрать libcurl.so.3 из ~/lib/x86_64. но ldd показывает, что берет из системной библиотеки libcurl.so.4 в /usr/lib64.   -  person Jegan    schedule 10.03.2014
comment
Вам нужен пробел между -L и ~/lib/x86_64/, иначе оболочка не расширит ~   -  person Jonathan Wakely    schedule 10.03.2014


Ответы (1)


Если команда, которую вы показываете в своем комментарии, верна:

gcc test.c -L~/lib/x86_64/ -lcurl -o test

... тогда вам нужен пробел между -L и ~/lib/x86_64/, иначе оболочка не расширит ~, поэтому компоновщик не ищет в правильном каталоге.

Итак, вам нужно либо:

gcc test.c -L ~/lib/x86_64/ -lcurl -o test

or:

gcc test.c -L$HOME/lib/x86_64/ -lcurl -o test

(Здесь пробел не нужен, потому что переменные раскрываются в любом месте слова, а ~ раскрывается только в начале слова.)

person Jonathan Wakely    schedule 10.03.2014
comment
Кажется, теперь это работает. Но теперь я получаю неопределенную ссылку на ошибку FIPS_mode. Я никогда не использую такую ​​функцию в своем источнике. Это всего лишь пустой исходный код в файле main. - person Jegan; 10.03.2014
comment
Возможно, вам придется добавить -lssl или -lcrypto или что-то в этом роде. - person Jonathan Wakely; 10.03.2014
comment
Нет, это не помогает, похоже, есть проблема с использованием старой библиотеки ssl в новой среде? - person Jegan; 10.03.2014
comment
Кажется, это проблема с libssl, позвольте мне опубликовать еще один вопрос с заголовком ssl. Но проблема со старой библиотекой решена. Большое спасибо за помощь. - person Jegan; 10.03.2014
comment
Решил эту проблему. У меня не было нужной версии libcrypto в моей локальной папке. Я скопировал правильную версию. Это решило. - person Jegan; 10.03.2014