Как я могу добавить libdl в сборку waf?

Я пытаюсь вызвать функцию dlsym из программы, скомпилированной с помощью системы сборки waf, но не могу связать libdl с помощью wscript. Это КАЖЕТСЯ очень простой задачей, но я пробовал миллион разных вещей и ничего не добился.

Изменить: было бы даже лучше, если бы существовал общий способ добавления флагов в конец каждой команды сборки. Я пробовал установить CXXFLAGS и другие переменные среды, но они, похоже, ничего не меняют...

1 ответ

Если вы попытаетесь пройти use=dl непосредственно к команде сборки, waf будет искать в файле config окружения "переменные uselib", чтобы сообщить, как с этим справиться.

Минимальный скрипт для создания простого test.c программа с dl может выглядеть так:

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;
}
Другие вопросы по тегам