0

我在另一个库libmsg中使用了一个名为liblogger的日志库(我已经实现了) 。对于他们两个,我都在使用自动工具。我在我的系统中成功安装了 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 消息

它确实有效。

谁能告诉我我错过了什么?

4

1 回答 1

2

您需要检查是否:

  • /usr/local/lib/etc/ld.so.conf(通常是这些天)。
  • ldconfig安装时运行liblogger。如果没有,请运行它。
  • liblogger.so.0实际上是在/usr/local/lib.
于 2013-06-11T16:46:00.507 回答