apt-get 可以安装一个软件包,为什么我构建源时没有找到一个库?

apt-get 可以安装一个软件包,为什么我构建源时没有找到一个库?

我在我的 ubuntu 机器上安装了 freeradius 2.1.12:

apt-get install freeradius

然后我下载了它的源代码,

apt-get source freeradius

构建源:

cd freeradius-2.1.12+dfsg
./configure --prefix=/root/freeradius/freeradius-2.1.12
make

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

只要fakeroot安装了软件包,软件包构建就不需要 root 访问权限。它可以并且应该以普通用户的身份完成。其他有用的软件包:debian-keyring对于 Debian 或ubuntu-keyringUbuntu,将用于apt-get验证源下载,方式 与使用或 的apt-get内容验证软件包下载的 方式相同。debian-archive-keyringubuntu-archive-keyring

一般情况下,只需将“freeradius”替换为任何其他包即可。你真的应该咨询Debian 构建教程解释这一切。

相关内容