【发布时间】:2015-10-06 04:53:33
【问题描述】:
我被自动制作链接难住了。即使在翻了几个小时的手册并在网上搜索之后,这也可能是对 autotools 的误解。
我有一个由 libtool 制作的 .la 库,一个 .dylib 共享库,并且正在创建一个程序。 .la 链接到 .dylib,程序使用 .la。
.la 库的 Makefile.am
lib_LTLIBRARIES = libA.la
libA_la_LDFLAGS = ${AM_LDFLAGS} -no-undefined
libA_la_LIBADD = $(LIBM) -Ldir/to/ -lB
libA_la_CPPFLAGS = ${AM_CPPFLAGS}
Makefile.am 用于带有 libtool 包装器的程序
noinst_PROGRAMS = test
test_SOURCES = test_source.c
test_LDADD = libA.la -Ldir/to/ -lB
libA.la 已创建并链接到 B.dylib,但 automake 创建的测试程序“包装器”正在导出 DYLD_LIBRARY_PATH 以查找 libA.la,但未链接到 B.dylib。给出错误
dyld: Library not loaded: ./B.dylib
Referenced from: /dir/to/test/.libs/test
Reason: image not found
Trace/BPT trap: 5
除了已经添加到test_LDADD 之外,我尝试过的一些事情是添加-Ldir/to/ -lB 到test_LDFLAGS。并尝试设置test_LDFLAGS = -rpath -Ldir/to,希望将运行时搜索路径设置为 B.dylib 所在的目录会有所帮助。
如果我手动导出DYLD_LIBRARY_PATH 以包含/dir/to/B.dylib,则测试程序能够运行,但我希望自动工具处理此问题,而不是要求某人在运行之前导出路径。
【问题讨论】:
标签: macos shared-libraries autotools automake libtool