我正在另一个库 libmsg 中使用名为 liblogger 的日志库(我已实现)。对于他们两个,我正在使用autotools。我在我的系统中成功安装了liblogger库,位于/ usr / local / lib目录下。
在其他 libmsg 的configure.ac脚本中,我验证了liblogger是否已安装在系统中,如下所示:
AC_CHECK_LIB([logger],
[log_init],
[],
[
echo "Error: Could not find liblogger."
exit 1
])
并将“-L / usr / local / lib”路径添加到LDFLAGS变量。
AC_CHECK_LIB测试找到库, libmsg 库及其check_PROGRAMS使用成功编译。
但是,当我尝试执行测试程序时,我收到错误:
加载共享库时出现错误:liblogger.so.0:无法打开共享对象文件:没有这样的文件或目录
确实, ldd 也找不到该库:
$ ldd msgs
linux-vdso.so.1 => (0x00007fff543ff000)
liblogger.so.0 => not found
libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007fdf329ad000)
但实际上该库位于 / usr / local / lib 中。
为了链接测试程序,使用以下指令调用libtool:
$ /bin/bash ../libtool --tag=CC --mode=link gcc -I../include -I../msg -L/usr/local/lib -O2 -Wall -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/local/include -I/usr/local/lib -L/usr/local/lib -o msgs msgs.o message.o base64.o misc.o -llogger -lglib-2.0
这实际上与以下内容相呼应:
libtool: link: gcc -I../include -I../msg -O2 -Wall -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/local/include -I/usr/local/lib -o msgs msgs.o message.o base64.o misc.o -L/usr/local/lib /usr/local/lib/liblogger.so -lglib-2.0
所以, -llogger 标志被 -L [..] /usr/local/liblogger.so 取代(我想这是正确的行为?我还没有确定它...)
实际上,如果我用以下方式调用测试程序:
LDPRELOAD = / usr / local / lib / liblogger.so msgs
它确实有效。
谁能告诉我,我错过了什么?
答案 0 :(得分:2)
您需要检查是否:
/usr/local/lib
位于/etc/ld.so.conf
(通常是这几天)。ldconfig
时运行了liblogger
。如果没有,请运行它。liblogger.so.0
实际上在/usr/local/lib
。