Добавьте путь к новой библиотеке LD_LIBRARY_PATH
(на Mac она имеет немного другое имя ...)
Ваше решение должно работать с использованием параметров -L/my/dir -lfoo
, во время выполнения используйте LD_LIBRARY_PATH, чтобы указать местоположение вашей библиотеки.
Осторожнее с использованием LD_LIBRARY_PATH - коротко (по ссылке):
.. последствия ..:
Безопасность : Помните, что каталоги, указанные в LD_LIBRARY_PATH, ищутся до (!) Стандартных местоположений? В этом
Кстати, отвратительный человек может заставить ваше приложение загрузить версию
общая библиотека, содержащая вредоносный код! Это одна из причин, почему
Исполняемые файлы setuid / setgid игнорируют эту переменную!
Производительность : загрузчик ссылок должен искать все указанные каталоги, пока не найдет каталог, в котором находится общая библиотека
находится - для ВСЕХ разделяемых библиотек приложение связано с!
Это означает, что много системных вызовов open (), которые потерпят неудачу с
«ENOENT (нет такого файла или каталога)»! Если путь содержит много
каталоги, количество неудачных звонков будет расти линейно, и
Вы можете сказать это по времени запуска приложения. Если некоторые
(или все) из каталогов находятся в среде NFS, при запуске
время ваших приложений может действительно стать длинным - и это может замедлиться
вся система!
Несоответствие : Это самая распространенная проблема. LD_LIBRARY_PATH заставляет приложение загружать разделяемую библиотеку, которая не была связана
против, и это, скорее всего, не совместимо с оригиналом
версия. Это может быть очень очевидным, то есть приложение
сбой, или это может привести к неправильным результатам, если подобранная библиотека не
вполне делает то, что сделала бы оригинальная версия. Особенно
последний иногда трудно отладить.
OR
Используйте параметр rpath через gcc для компоновщика - будет использован путь поиска библиотеки времени выполнения
вместо просмотра в стандартном каталоге (опция gcc):
-Wl,-rpath,$(DEFAULT_LIB_INSTALL_PATH)
Это хорошо для временного решения. Компоновщик сначала ищет библиотеки в LD_LIBRARY_PATH, а затем просматривает стандартные каталоги.
Если вы не хотите постоянно обновлять LD_LIBRARY_PATH, вы можете сделать это на лету в командной строке:
LD_LIBRARY_PATH=/some/custom/dir ./fooo
Вы можете проверить, что компоновщик библиотеки знает об использовании (пример):
/sbin/ldconfig -p | grep libpthread
libpthread.so.0 (libc6, OS ABI: Linux 2.6.4) => /lib/libpthread.so.0
И вы можете проверить, какую библиотеку использует ваше приложение:
ldd foo
linux-gate.so.1 => (0xffffe000)
libpthread.so.0 => /lib/libpthread.so.0 (0xb7f9e000)
libxml2.so.2 => /usr/lib/libxml2.so.2 (0xb7e6e000)
librt.so.1 => /lib/librt.so.1 (0xb7e65000)
libm.so.6 => /lib/libm.so.6 (0xb7d5b000)
libc.so.6 => /lib/libc.so.6 (0xb7c2e000)
/lib/ld-linux.so.2 (0xb7fc7000)
libdl.so.2 => /lib/libdl.so.2 (0xb7c2a000)
libz.so.1 => /lib/libz.so.1 (0xb7c18000)