问题描述
我在安装过程中使用以下命令安装了ROHC库(http://rohc-lib.org):
autoreconf -if
./configure --enable-static=yes --enable-shared=no --disable-shared --prefix=/usr
make
make install
它已成功在/usr/lib
目录中安装了静态(并且只有静态)库。它包含librohc.a
和librohc.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的.so
或configure.ac
添加依赖项),那对我会更好。
请注意,Makefile.am
和OpenVPN
库都需要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)中,问题不会发生。