【发布时间】:2016-10-20 17:14:41
【问题描述】:
我有一个生成静态库L的项目。L的某些功能可以加载一些插件M(使用dlopen("libmmmm.so"):M是共享库(模块))。
测试L的module_load()函数的测试T由主测试T(L静态链接)和插件M组成,用于测试其在T+L中的加载。
测试是安装的一部分(已定义 testdir)。
下面是测试 T 目录中的 Makefile.am(构建 T 和 M):
#the test program linked with the static lib L:
#(the tests are distributed as well, hence the test_* prefix)
test_PROGRAMS = tttt
tttt_SOURCES = tttt.c
tttt_LDADD = llll.la
#the module to be loaded by the T+L test:
lib_LTLIBRARIES = libmmmm.la
libmmmm_la_SOURCES = mmmm.c
libmmmm_la_LDFLAGS = $(AM_LDFLAGS) -module -shared
问题在于可以找到模块的路径: 测试工作(即找到 libmmmm.so)进行检查。但树外 (VPATH) 构建失败(未找到共享库)。
所以问题:
它应该如何工作? libtool 必须设置类似 LD_LIBRARY_PATH 的东西,我猜,因为dlopen() 永远不会理解*.la 包装器...
那么它有什么作用,我该如何解决这个问题,以便它一直工作,即进行检查,从树构建,进行 distcheck...
将搜索路径硬编码到 .libs 目录中感觉不太便携:我们使用自动工具,因为我们针对许多不同的平台。
PS:我知道由于“-module”选项,M的“lib”前缀可以省略
【问题讨论】:
标签: shared-libraries autotools libtool