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