configure查找库,但ldd没有

时间:2013-06-11 15:22:25

标签: autoconf libtool ldd

我正在另一个库 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

它确实有效。

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

1 个答案:

答案 0 :(得分:2)

您需要检查是否:

  • /usr/local/lib位于/etc/ld.so.conf(通常是这几天)。
  • 安装ldconfig时运行了
  • liblogger。如果没有,请运行它。
  • liblogger.so.0实际上在/usr/local/lib