news 2026/10/30 6:12:25

在M1 MacOS上构建ztm项目时解决arm64架构的未定义符号问题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
在M1 MacOS上构建ztm项目时解决arm64架构的未定义符号问题

在M1 MacOS上构建ztm项目时解决arm64架构的未定义符号问题

【免费下载链接】ztmZTM(零信任网格)是一个以隐私为先的开源去中心化端到端加密软件定义网络,基于HTTP/2隧道。体验无限连接,将全球网格化!项目地址: https://gitcode.com/flomesh-io/ztm

背景介绍

在苹果M1芯片的MacOS系统上构建ztm项目时,开发者可能会遇到一个特定的链接器错误。这个错误表现为在编译过程的最后阶段,链接器无法找到某些C++标准库中的异常处理相关符号,导致构建失败。

错误现象

当使用LLVM 18工具链在M1 Mac上构建ztm项目时,链接阶段会出现以下典型错误:

Undefined symbols for architecture arm64: "std::exception_ptr::__from_native_exception_pointer(void*)", referenced from: asio::detail::thread_info_base::capture_current_exception() in admin-service.cpp.o "___cxa_init_primary_exception", referenced from: asio::detail::thread_info_base::capture_current_exception() in admin-service.cpp.o

这些错误表明链接器无法找到与C++异常处理相关的关键符号,特别是std::exception_ptr和__cxa_init_primary_exception这两个与异常处理机制密切相关的组件。

问题根源

经过分析,这个问题源于LLVM 18版本在MacOS平台上的一个已知缺陷。LLVM(Low Level Virtual Machine)是一套编译器基础设施项目,包含了Clang编译器前端等组件。在18版本中,对于arm64架构(即M1芯片使用的架构)的异常处理支持存在不完善之处,导致这些关键符号无法被正确链接。

解决方案

针对这个问题,目前最有效的解决方法是降级使用LLVM 17版本。具体操作步骤如下:

  1. 使用Homebrew包管理器卸载现有的LLVM 18版本
  2. 安装LLVM 17版本
  3. 确保构建系统正确识别并使用LLVM 17工具链

对于使用Homebrew的开发者,可以执行以下命令完成版本切换:

brew uninstall llvm brew install llvm@17

技术细节

C++异常处理机制在底层依赖于一系列特定的符号和函数。std::exception_ptr是C++11引入的用于跨线程传递异常的类型,而__cxa_init_primary_exception是Itanium C++ ABI(应用二进制接口)中定义的异常处理辅助函数。这些组件在异常捕获、传递和重新抛出过程中起着关键作用。

LLVM 18在arm64架构上对这些异常处理组件的实现存在缺陷,导致生成的代码无法正确链接标准库中的相关实现。降级到LLVM 17可以规避这个问题,因为该版本在这些组件的实现上更为稳定。

预防措施

为了避免类似问题,开发者在M1 Mac上进行C++项目开发时可以考虑:

  1. 在项目文档中明确标注推荐的编译器版本
  2. 使用CI/CD系统时,为M1 Mac配置特定的LLVM版本
  3. 定期关注LLVM项目的发布说明,了解已知问题和修复情况

总结

在苹果M1芯片的MacOS系统上构建ztm项目时,如果遇到arm64架构的未定义符号错误,特别是与C++异常处理相关的符号,很可能是LLVM 18版本的已知问题所致。通过降级到LLVM 17版本可以有效地解决这个问题。随着LLVM项目的持续发展,未来版本有望修复这一缺陷,开发者可以适时关注更新情况。

【免费下载链接】ztmZTM(零信任网格)是一个以隐私为先的开源去中心化端到端加密软件定义网络,基于HTTP/2隧道。体验无限连接,将全球网格化!项目地址: https://gitcode.com/flomesh-io/ztm

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/30 6:09:20

Linux内核优化

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/30 6:07:55

in + Vue3 + ElementPlus 实践:多租户下的数据越权防护

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/30 6:07:29

Gin + Vue3 + ElementPlus 接口分页与筛选参数规范

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/30 6:03:32

MATLAB实现AOA与TOA联合MUSIC定位仿真:从建模到求根MUSIC进阶

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/30 6:00:54

多基地定位加权最小二乘算法解析:从模型到工程实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/30 5:59:04

SSM校园地图导航系统毕设实战:从环境搭建到答辩95分

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华