libtool:我的模块的路径是什么?

libtool: what is the path to my module?

我正在从 autotools+libtool 项目创建一个模块: Makefile.am 看起来如下

#the module:                                                     
lib_LTLIBRARIES = mmmm.la                                        
mmmm_la_SOURCES = mmmm.c                                 
mmmm_la_LDFLAGS = $(AM_LDFLAGS) -module -shared

现在,我想为我的模块编写 C 测试。测试应该开始加载共享对象 mmmm.xx(其中 .xx 是 .so.la

在我的 C 测试中,我应该给 dlopen()lt_dlopen() 什么路径?:我的模块的相对位置(与测试程序相比)是不同的,这取决于我是否进行检查, out of tree make check, 或者 make installcheck...

我尝试使用 lt_dlopen(),希望在测试 Makefile.am 中传递的 -dlopen 选项可以帮助 autotools 在调用 lt_dlopen() 时找到 lib,但确实如此似乎没有帮助:lt_dlopen() 确实可以打开 .la 文件,但仍然必须告诉该文件所在的位置(可能省略 .libs 目录)

在使用 ltdl 库进行测试时,我的测试 makefile 如下所示:

#the module test (tests are also installed, hence the "test" prefix)
test_PROGRAMS = tttt
tttt_SOURCES = tttt.c
tttt_LDADD = "-dlopen" mmmm.la
tttt_DEPENDENCIES = mmmm.la

有什么好的提示吗?

处理该问题的一种方法是将 LD_LIBRARY_PATH 环境变量设置为库的安装位置。

但是,由于您需要它进行测试,我会说从 configure.ac 导出一个变量到 config.h。因此,任何包含 config.h 的文件都会有一个 #define your_variable,可用于设置 dlopen.

的路径