0

我正在尝试从使用 waf 构建系统编译的程序中调用 dlsym 函数,但无法使用 wscript 链接 libdl。这似乎是一项非常简单的任务,但我已经尝试了一百万种不同的东西,但一无所获。

编辑:如果有一种通用方法可以在每个构建命令的末尾添加标志,那就更好了。我试过设置 CXXFLAGS 和其他环境变量,但它们似乎没有改变任何东西......

4

1 回答 1

0

如果您尝试直接传递use=dl给构建命令,waf 将在配置环境字典中查找“uselib 变量”以告诉它如何处理它。

用于构建简单test.c程序的最小 wscriptdl可能如下所示:

def options(opt):
    opt.load('compiler_c')

def configure(conf):
    conf.load('compiler_c')

    # Make sure the we're able to link against dl
    conf.check(lib='dl')

    # If someone passes LIB_DL, to the build command, link against system library dl
    conf.env.LIB_DL = 'dl'

def build(bld):
    bld(source='test.c',
        target='test_program',
        features='c cprogram',

        # Waf will look in LIB_DL, LIBPATH_DL, CXXFLAGS_DL, etc. for how to handle this
        use='DL')

相关文件

Waf 还提供了一种简写方式来避免显式设置LIB_DL

def configure(conf):
    conf.load('compiler_c')
    conf.check(lib='dl', uselib_store='DL')     

这在此处有所记录

为了完整起见,这是test.c我用来测试的文件:

#include <dlfcn.h>

int main(int argc, char** argv)
{
    dlopen("some/file", RTLD_LAZY);
    return 0;
}
于 2020-03-19T15:58:38.083 回答