为什么Autotools忽略已安装的静态库?

问题描述

我在安装过程中使用以下命令安装了ROHC库(http://rohc-lib.org):

autoreconf -if
./configure --enable-static=yes --enable-shared=no --disable-shared --prefix=/usr
make
make install

它已成功在/usr/lib目录中安装了静态(并且只有静态)库。它包含librohc.alibrohc.la,并且没有共享库(即librohc.so*)。

我正在尝试将此库与OpenVPN链接。我在configure.ac的{​​{1}}中添加了以下几行:

OpenVPN

但是当我在AC_CHECK_HEADERS( [rohc/rohc.h rohc/rohc_comp.h rohc/rohc_decomp.h],[AC_MSG_ERROR([ROHC headers not found])] ) AC_CHECK_LIB( [rohc],[rohc_compress4],[AC_MSG_ERROR([ROHC library not found])] ) 源目录中运行make时,出现以下错误

OpenVPN

是的,/bin/sh ../../libtool --tag=CC --mode=link gcc -dplUGIN_LIBDIR=\"/usr/local/lib/openvpn/plugins\" -Wall -Wno-unused-parameter -Wno-unused-function -g -O2 -std=c99 -lrt -o openvpn argv.o base64.o buffer.o clinat.o comp.o compstub.o comp-lz4.o crypto.o crypto_openssl.o crypto_mbedtls.o dhcp.o error.o event.o fdmisc.o forward.o fragment.o gremlin.o helper.o httpdigest.o lladdr.o init.o interval.o list.o lzo.o manage.o mbuf.o misc.o platform.o console.o console_builtin.o console_systemd.o mroute.o mss.o mstats.o mtcp.o mtu.o mudp.o multi.o ntlm.o occ.o pkcs11.o pkcs11_openssl.o pkcs11_mbedtls.o openvpn.o options.o otime.o packet_id.o perf.o pf.o ping.o plugin.o pool.o proto.o proxy.o ps.o push.o reliable.o route.o schedule.o session_id.o shaper.o sig.o socket.o socks.o ssl.o ssl_openssl.o ssl_mbedtls.o ssl_verify.o ssl_verify_openssl.o ssl_verify_mbedtls.o status.o tls_crypt.o tun.o win32.o rohc.o trunk.o cryptoapi.o ../../src/compat/libcompat.la -lnsl -lresolv -llzo2 -llz4 -lssl -lcrypto -ldl -lrohc libtool: link: gcc -dplUGIN_LIBDIR=\"/usr/local/lib/openvpn/plugins\" -Wall -Wno-unused-parameter -Wno-unused-function -g -O2 -std=c99 -o openvpn argv.o base64.o buffer.o clinat.o comp.o compstub.o comp-lz4.o crypto.o crypto_openssl.o crypto_mbedtls.o dhcp.o error.o event.o fdmisc.o forward.o fragment.o gremlin.o helper.o httpdigest.o lladdr.o init.o interval.o list.o lzo.o manage.o mbuf.o misc.o platform.o console.o console_builtin.o console_systemd.o mroute.o mss.o mstats.o mtcp.o mtu.o mudp.o multi.o ntlm.o occ.o pkcs11.o pkcs11_openssl.o pkcs11_mbedtls.o openvpn.o options.o otime.o packet_id.o perf.o pf.o ping.o plugin.o pool.o proto.o proxy.o ps.o push.o reliable.o route.o schedule.o session_id.o shaper.o sig.o socket.o socks.o ssl.o ssl_openssl.o ssl_mbedtls.o ssl_verify.o ssl_verify_openssl.o ssl_verify_mbedtls.o status.o tls_crypt.o tun.o win32.o rohc.o trunk.o cryptoapi.o ../../src/compat/.libs/libcompat.a -lrt -lnsl -lresolv -llzo2 -llz4 -lssl -lcrypto -ldl /usr/lib/librohc.so gcc: /usr/lib/librohc.so: No such file or directory 不存在,但是/usr/lib/librohc.so存在。为什么在没有/usr/lib/librohc.a的情况下不与静态库/usr/lib/librohc.a链接

您可能会问我为什么我不安装ROHC的共享库;答案是我要强制与ROHC进行静态链接,完成后将卸载ROHC库。

如果有人可以告诉我如何在不先安装ROHC的情况下进行静态链接(例如向OpenVPN的.soconfigure.ac添加依赖项),那对我会更好。

请注意,Makefile.amOpenVPN库都需要ROHC

解决方法

我用ROHC库的--libdir=/usr/lib64指定了./configure,最后,构建系统在与OpenVPN链接时使用了静态库librohc.a。我安装了ROHC:

autoreconf -if
./configure --enable-static --disable-shared --prefix=/usr --libdir=/usr/lib64
make
make install

现在,它将库安装为/usr/lib64/librohc.a,OpenVPN的编译成功找到并链接到它。

当然,它是在64位计算机(CentOS 6)中进行的。在没有/usr/lib64这样的东西的32位环境(32位MIPS路由器中的OpenWrt)中,问题不会发生。