2

我在我的项目中使用 GNU autohell,它是一个 C++ 库。它应该链接到 ZMQ 并提升。所以我添加了这个检查所需的库configure.ac

PKG_CHECK_MODULES(ZMQ, libzmq >= 3.2.3)

和链接器标志Makefile.am

AM_LDFLAGS = -lzmq

一切都可以编译和链接,但是在实际应用程序中尝试使用库时出现未定义的引用错误。我想知道它是否真的与必要的库相关联。令人惊讶的是,结果ldd是这样的:

ldd ./libait-0.1.0.so
    linux-vdso.so.1 =>  (0x00007fff85dfd000)
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fea7efa4000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fea7ebe5000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fea7e9ce000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fea7e6d2000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fea7f4d9000)

没有指向 ZMQ 的链接,也没有像这样添加的其他库。我究竟做错了什么?

更新

的内容Makefile.am

AUTOMAKE_OPTIONS = subdir-objects
ACLOCAL_AMFLAGS = ${ACLOCAL_FLAGS} -I m4
#AM_LDFLAGS = -lzmq
libait_la_LIBADD = $(ZMQ_LIBS)
lib_LTLIBRARIES = libait-@AIT_API_VERSION@.la
AM_CPPFLAGS = -pipe
libait_@AIT_API_VERSION@_la_SOURCES = ....
libait_@AIT_API_VERSION@_la_LDFLAGS = -version-info $(AIT_SO_VERSION)
ait_includedir = $(includedir)/ait
ait_include_HEADERS =  ....
ait_libincludedir = $(libdir)/ait-$(AIT_API_VERSION)/include
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = ait-$(AIT_API_VERSION).pc
dist_noinst_SCRIPTS = autogen.sh
4

1 回答 1

1

PKG_CHECK_MODULES(ZMQ, libzmq >= 3.2.3)设置变量:ZMQ_CFLAGSZMQ_LIBS

用于AC_SUBST(ZMQ_LIBS)替换变量configure.acMakefile.am
libait_la_LIBADD = $(ZMQ_LIBS)

这种方法可以libtool处理库依赖关系,并在libait.la文件中维护依赖关系信息。

于 2013-05-23T17:07:18.477 回答