You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Meson交叉编译中如何配置原生子项目?

Meson交叉编译中如何配置原生子项目?

嘿,这个问题我之前刚好处理过,能帮你捋清楚!你现在遇到的核心问题是:虽然测试可执行文件和依赖库都标记了native: true,但通过wrapdb引入的Catch2子项目默认还是会用交叉编译的配置构建,导致原生测试程序和交叉编译的Catch2依赖不兼容,触发错误。

解决思路很明确——强制Catch2子项目以原生环境构建,具体可以这么调整你的Meson脚本:

project('demo', 'cpp', default_options: [ 'cpp_std=c++20' ])

# 手动引入Catch2子项目,显式指定native=true确保用主机编译器构建
catch2_sub = subproject('catch2', native: true, default_options: [ 'tests=false' ])
# 从原生子项目中获取所需的依赖对象
catch2 = catch2_sub.get_variable('catch2_with_main_dep')

uut_lib = static_library('uut', 'uut.cpp', native: true)
uut_inc = include_directories('.')

uut = declare_dependency(
    link_with: [ uut_lib ],
    include_directories: [ uut_inc ]
)

test('test1',
    executable('test1', 'test1.cpp',
        dependencies: [ uut, catch2 ],
        native: true
    )
)

为什么这么改能解决问题?原来的dependency()函数里的native: true只是告诉Meson“我需要一个原生环境的依赖”,但当fallback到子项目时,Meson并不会自动把这个子项目标记为原生构建。而用subproject()函数显式加上native: true参数,就会强制Catch2子项目使用主机系统的编译器和环境来构建,完全匹配你的原生测试程序的需求,依赖链统一后,交叉编译时的错误自然就消失了。

备注:内容来源于stack exchange,提问作者Simon Richter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 14:24:38