Настройка без SPECI fying --prefix
или другие параметры местоположения установки, по умолчанию, установили новый libpcap в /usr/local/lib. Предположительно, старая версия, которую вы пытаетесь переопределить, - это система CentOS, и она находится в /usr/lib.
Поэтому, казалось бы, что компоновщик ищет /USR/Библиотека перед тем /USR/местные/Библиотека.
Вы можете увидеть, какие именно Libpcap в настоящее время связаны с добавлением -Wl,-Map,foo.map
к команде GCC, который связывающей ваше приложение, и получившийся оглавлению foo.map файл для libpcap
.
Вы можете увидеть путь поиска библиотек, которые компоновщик использует смотря на выходе (оба)
gcc -print-search-dirs | grep ^libraries
ld --verbose | grep SEARCH_DIR
Если /USR/Lib появляется перед /USR/местные/Библиотека , вы можете добавить -L/usr/local/lib
в свою команду связи, чтобы изменить порядок и получить новую библиотеку. Но на самом деле это взломать.
Все, что было в случае проблемы во время связи. В зависимости от того, как эта разделенная библиотека имеет версию, реальная проблема может возникать при запуске приложения во время динамической компоновки. Или, может быть, и то и другое.
Какой путь вы видите в списке для libpcap при запуске ldd в вашем приложении? Как насчет того, когда вы создали свое приложение с помощью -L/usr/local/lib
?
ldd yourapp
Чтобы заставить динамический компоновщик, чтобы найти вашу разделяемую библиотеку в /USR/местные/Библиотека, вы хотели бы посмотреть в -rpath
вариант компоновщиком, или переменной в LD_LIBRARY_PATH
среды. Добавление -L/usr/local/lib -Wl,-rpath,/usr/local/lib
в вашу команду связи обязательно обеспечит вашу новую версию библиотеки. Но и -rpath
, и LD_LIBRARY_PATH
являются еще более взломанными и представляют другие проблемы, если вы попытаетесь дать свое приложение двоичным для кого-то другого без тщательного рассмотрения.
Не-хак подход все это для того, чтобы установить новую общую библиотеку в каталог, который уже известен системе.Это, вероятно, означает /usr/lib, если это где находится существующая версия библиотеки.
Вы можете сделать это, добавив --prefix=/usr
в команду configure при создании libpcap. После установки нового libpcap вы сможете скомпилировать и связать свое приложение с ним без каких-либо дополнительных опций компоновщика.
Однако это мешает управлению пакетами, поэтому это вызовет другие проблемы при обновлении через диспетчер пакетов. Таким образом, вы можете сначала удалить пакет libpcap или, в общем, взглянуть на правильные способы замены системных пакетов на CentOS.