添加OpenCASCADE依赖时Meson链接器报错求助
解决M1 Mac上Meson链接OpenCASCADE时的AppKit.framework错误
错误核心原因:链接器收到的是AppKit.framework的完整路径作为输入文件,但macOS框架的正确链接方式是使用-framework AppKit参数,而非直接传递框架目录路径。同时日志显示AppKit.framework被重复传递,这是因为Meson通过cmake方式获取OpenCASCADE依赖时,未正确将框架依赖转换为链接器可识别的格式。
解决方案1:手动修正OpenCASCADE依赖的链接参数
修改meson.build,过滤并转换occ_dep的链接参数:
project('utils', 'cpp') json_dep = dependency('jsoncpp') boost_dep = dependency('boost', modules : [ 'filesystem' ]) occ_dep = dependency('OpenCASCADE', method: 'cmake') # 处理OpenCASCADE的框架依赖问题 filtered_occ_link_args = [] frameworks = [] foreach arg : occ_dep.get_link_args() if arg.contains('.framework') # 从路径中提取框架名称 framework_name = arg.split('.framework')[0].split('/')[-1] frameworks += framework_name else filtered_occ_link_args += arg endif endforeach # 创建修正后的依赖对象 fixed_occ_dep = declare_dependency( dependencies: occ_dep, link_args: filtered_occ_link_args + ['-framework ' + f for f in frameworks], include_directories: occ_dep.get_include_dirs() ) utils_deps = [ fixed_occ_dep, json_dep, boost_dep ] utils_lib = library('utils', dependencies: utils_deps)
解决方案2:改用pkg-config获取OpenCASCADE依赖
若你的OpenCASCADE安装提供了pkg-config的.pc文件(Homebrew安装的版本通常自带),替换依赖获取方式:
occ_dep = dependency('OpenCASCADE', method: 'pkg-config')
这种方式下Meson能自动识别并生成正确的-framework链接参数,避免路径传递错误。
解决方案3:确认OpenCASCADE的架构兼容性
确保安装的OpenCASCADE是针对arm64架构编译的(M1芯片需要原生arm64版本)。通过Homebrew安装的话,直接执行brew install opencascade即可,Homebrew在M1设备上默认编译原生arm64包。
内容的提问来源于stack exchange,提问作者Ashkan
相关产品推荐
相关产品推荐

