尝试添加自定义依赖项时Meson&Ninja中的链接器错误

时间:2019-10-02 17:49:47

标签: linker dependencies linker-errors meson-build

我正在尝试使用Meson将基于源的库添加到我的项目中。但是,当我尝试这样做时,会出现目标文件链接错误。

我尝试将自定义依赖项添加到项目可执行文件中,但是当然,它说它是未定义的(在前面的代码中srclibdep),因为它是在项目可执行文件之后定义的。但是,如果我在Project可执行文件之前进行定义,则无法链接。

这是我的./meson.build

project('ProjectName', 'cpp', version: '0.1', default_options: ['warning_level=3', 'cpp_std=c++14'])

srclibinc = include_directories('SourceLibraryName')
cpp = meson.get_compiler('cpp')
add_languages('cpp')
proj = executable('ProjectName', 'main.cpp', install: true, include_directories: srclibinc)
srclibdep = declare_dependency(include_directories: srclibinc, link_with: proj)

和./SourceLibraryName/meson.build

files = run_command('files.sh').stdout().strip().split('\n')

foreach f: files
        install_headers(f)
endforeach

srclib = shared_library('SourceLibrary', files, install: true)
pkg_mod = import('pkgconfig')
pkg_mod.generate(libraries: srclib, version: '0.1', name: 'libsrc', description: 'Source-based library.')

我收到数百条链接错误,指出x::Y引用不存在,但是编译器编译了代码,就好像依赖项已经存在。

1 个答案:

答案 0 :(得分:1)

我认为应该是

// make srclib available to code below:
subdir('SourceLibraryName')

// create dependency object with library to link against:
srclibdep = declare_dependency(link_with: srclib)

// add this object to dependencies:
proj = executable('ProjectName', 'main.cpp', install: true, include_directories: srclibinc, dependencies : srclibdep)

PS:

与此事无关,只是注意到:

  • 如果仅在项目中使用共享库,则不必生成pkg-config文件
  • 将版本添加到共享库是一个好习惯,特别是如果它将与其他项目共享时:

    shared_library('SourceLibrary',文件,安装:true,版本:meson.project_version())

meson.project_version()也可以用于pkg-config文件,因此您不会忘记在所有位置进行更新

  • 您没有为库安装任何标头,因此其他项目将找不到您的库提供的API