apt-get может установить пакет, почему библиотека не найдена при сборке исходного кода?
Я установил Freeradius 2.1.12 на мою машину с Ubuntu:
apt-get install freeradius
Затем я скачал его источник,
apt-get source freeradius
построить источник:
cd freeradius-2.1.12+dfsg
./configure --prefix=/root/freeradius/freeradius-2.1.12
make
сделать не удается:
/root/freeradius-2.1.12+dfsg/src/lib/libfreeradius-radius.la -lnsl -lresolv -lpthread -lssl -lcrypto
gcc -shared .libs/eapcommon.o .libs/eapcrypto.o .libs/eapsimlib.o .libs/fips186prf.o -Wl,--rpath -Wl,/root/freeradius-2.1.12+dfsg/src/lib/.libs -Wl,--rpath -Wl,/root/freeradius/freeradius-2.1.12/lib /root/freeradius-2.1.12+dfsg/src/lib/.libs/libfreeradius-radius.so -lnsl -lresolv -lpthread -lssl -lcrypto -Wl,-soname -Wl,libfreeradius-eap-2.1.12.so -o .libs/libfreeradius-eap-2.1.12.so
/usr/bin/ld: cannot find -lssl
/usr/bin/ld: cannot find -lcrypto
collect2: error: ld returned 1 exit status
Тогда я удивляюсь, как может работать "apt-get install", поэтому я проверил:
#type freeradius
freeradius is hashed (/usr/sbin/freeradius)
# ldd /usr/sbin/freeradius
libfreeradius-radius-2.1.12.so => /usr/lib/freeradius/libfreeradius-radius-2.1.12.so (0x00007f3d6d1df000)
libcrypto.so.1.0.0 => /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007f3d6c735000)
Таким образом, libcrypto и libssl существуют в /lib/x86_64-linux-gnu.
Тогда как я могу дать команду configure взять /lib/x86_64-linux-gnu?
Более общий вопрос - если пакет можно установить, какой самый простой способ собрать его из исходного кода? Можно ли как-нибудь скачать скрипт сборки?
1 ответ
Поскольку вы уже используете исходный код пакета, это действительно просто: вам не хватает пакетов разработки, необходимых для его сборки. В стандартной среде минимальной сборки пакетов все еще могут отсутствовать некоторые другие обязательные пакеты. Итак, сначала:
# apt-get install build-essential fakeroot devscripts
тогда для самого пакета:
# apt-get build-dep freeradius
Вы заметите, что для каждого libfooX
пакет, необходимый для установки результата, он также будет загружен libfoo-dev
нужно было его собрать, и чаще всего, еще много пакетов. Поскольку библиотеки разработки , а также соответствующие включаемые файлы упакованы отдельно от соответствующих библиотек времени выполнения .
Вы можете собрать пакет обратно, запустив что-то вроде этого в новом каталоге:
$ dpkg-buildpackage -us -uc -rfakeroot -b
Если вам даже не нужно ничего менять, это можно объединить в:
$ apt-get --build source freeradius
Сборка пакета не требует root-доступа, пока пакет fakeroot
установлено. Это может и должно быть сделано как обычный пользователь. Другой полезный пакет: debian-keyring
для Debian или ubuntu-keyring
для Ubuntu, который будет использоваться apt-get
чтобы проверить исходный код загрузки таким же образом apt-get
проверяет загрузку пакета, используя содержимое debian-archive-keyring
или же ubuntu-archive-keyring
,
Просто замените "freeradius" на любой другой пакет для общего случая. Вы действительно должны обратиться к руководству по сборке Debian, объясняющему все это.