confugure生成makefile文件缺少依赖包的一种临时解决方法

报错示例:

checking for openssl... no
configure: error: Package requirements (openssl) were not met:

No package 'openssl' found

遇到问题是在编译axel的时候,提示缺少openssl包,如果环境正常的情况下,解决这个问题其实也很容易
sudo apt-get install libssl-dev

但是当时正在升级ubuntu20.04版本,apt暂时使用不了,况且本机也曾经编译安装过openssl版本,所以有没有其他的方法使用我们已经安装的openssl而不是重新下载一个其他版本的openssl-dev呢?

首先看这个报错的来源:
查看configure.ac文件,搜索openssl关键字可以看到,包检查是用到了PKG_CHECK_MODULES这个宏

AS_IF([test "x$with_ssl" != xno], [
PKG_CHECK_MODULES([SSL], [openssl])

(关于宏的说明可以参考这里:https://autotools.io/pkgconfig/pkg_check_modules.html)

这个宏检查包的方式是依赖于pkg-config,通过man pkg-config查看其说明,在大多数系统上,pkg-config会查找/usr/lib/pkgconfig, /usr/share/pkgconfig, /usr/local/lib/pkgconfig and /usr/local/share/pkgconfig 目录去寻找包的信息,如何获取呢?man里面也给出了示例,例如获取mono-2的依赖信息,可以执行如下命令

# pkg-config --cflags --libs mono-2
-D_REENTRANT -I/usr/lib/pkgconfig/../../include/mono-2.0 -L/usr/lib/pkgconfig/../../lib -lmono-2.0 -lm -lrt -ldl -lpthread

输出信息和/usr/lib/pkgconfig/mono-2.pc里面的定义完全一致。

有了这个思路,我们照葫芦画瓢,复制一个openssl的包信息文件不就行了,具体操作如下

vi /usr/lib/pkgconfig/openssl.pc,编辑内容如下

prefix=/opt/openssl1.1.1d
exec_prefix=${prefix}/bin
libdir=${prefix}/lib
includedir=/opt/openssl1.1.1d/include
sysconfdir=/etc

Name: openssl
Description: openssl
Version: 1.1.1d
Libs: -L${libdir} -lssl -lcrypto
Cflags: -I${includedir}

重新执行axel的configure,正常生成Makefile文件。

接下来就可以make编译了,如果此时还提示找不到依赖包的头文件或者库等编译错误,可以手动修改CFLAG参数,将头文件路径添加到这里。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据