0

我有一个用于共享库的 Meson 项目。它使用一个 CMake 子项目,它提供一个静态库:

cmake = import('cmake')
sub_prj = cmake_subproject('some_subproject-1.0.0')
sub_dep = sub_prj.dependency('static_sublib')
...
my_lib = library('my_lib', ..., dependencies : sub_dep)

介子给了我以下错误:

ERROR: Can't link non-PIC static library 'cm_gsl' into shared library 'toolbox'. Use the 'pic' option to static_library to build with PIC.

如何告诉 CMake 模块静态库必须具有与位置无关的代码?

4

1 回答 1

0

应该可以使用以下代码:

cmake = import('cmake')
cmake_opts = cmake.subproject_options()
cmake_opts.add_cmake_defines({'CMAKE_POSITION_INDEPENDENT_CODE': true})
sub_proj = cmake.subproject('projectname', options: cmake_opts)
my_lib = sub_proj.dependency('lib-target')

CMake 子项目的配置选项的文档可以在这里找到:https ://mesonbuild.com/CMake-module.html#configuration-options

于 2021-08-24T13:38:22.750 回答