- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在为我的项目使用 GNU autohell,它是一个 C++ 库。它应该链接到 ZMQ 和提升。所以我在 configure.ac
PKG_CHECK_MODULES(ZMQ, libzmq >= 3.2.3)
和 Makefile.am
中的链接器标志:
AM_LDFLAGS = -lzmq
一切都编译和链接,但当我尝试在实际应用程序中使用库时出现 undefined reference 错误。我想知道它是否真的链接到必要的库。令人惊讶的是,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
最佳答案
PKG_CHECK_MODULES(ZMQ, libzmq >= 3.2.3)
设置变量:ZMQ_CFLAGS
和 ZMQ_LIBS
。
在 configure.ac
中使用 AC_SUBST(ZMQ_LIBS)
作为 Makefile.am
替换变量:libait_la_LIBADD = $(ZMQ_LIBS)
这种方法让 libtool
处理库的依赖关系,并在 libait.la
文件中维护依赖信息。
关于c++ - 添加 AM_LDFLAGS 对最终库没有影响,导致链接器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16717222/
我正在为我的项目使用 GNU autohell,它是一个 C++ 库。它应该链接到 ZMQ 和提升。所以我在 configure.ac 中添加了对所需库的检查 PKG_CHECK_MODULES(ZM
我想知道 AM_LDFLAGS 和 LDFLAGS 之间的区别,因为我遇到了错误 error: AM_LDFLAGS must be set with '=' before using '+=' 当我
我想为我的项目编写依赖关系规则,因为项目包含 src 目录,并且 src 文件夹包含依赖于 file1.c 的 main.c 和 file1.c 依赖于 file2.c我有非标准库目录和非标准包含目录
我是一名优秀的程序员,十分优秀!