在 Mac OS M1 芯片组上构建 Boost

问题描述 投票:0回答:1

我尝试了将近一百种方法来使它起作用,但似乎没有任何效果。 最近入手一台Mac book pro M1 MAX(so arm64架构),系统默认自带clang g++。

我想安装boost库。使用自制软件安装了 1.80 版本,但我需要使用 1.65.1 版本的项目(我尝试使用 1.80 版本编译我的项目,并且从 boost 库中引发了大量未定义的符号和错误,即使我拥有所有这些,所以我猜我需要安装所需的完全相同的版本)

所以我决定按照boost指南自己构建和编译boost https://www.boost.org/doc/libs/1_65_1/more/getting_started/unix-variants.html

在第 5.1 节之后,我尝试使用引导脚本,但使用 Darwin 工具集失败了。 (显然是一些 Clang 警告导致了错误)。然后我通过像这样更改 boost 源代码来解决: https://github.com/boostorg/build/commit/48e9017139dd94446633480661e5447c7e0d8b1b

但是在编译过程中还有很多问题

我不知道该怎么做才能用 clang 编译,我什至不知道这是否会为 arm64 架构编译。

无论如何,我安装了 gcc 编译器并尝试使用 gcc 工具集。

./bootstrap --with-toolset=gcc

引导程序有效,但随后运行 b2 脚本会立即导致分段错误,并且在我尝试的每个命令上(甚至 --help 选项都会引发异常...)。

为什么在 arm 芯片组上构建 boost 如此复杂? 我可以做些什么来构建 boost(clang 或 gcc、arm 或交叉编译的通用库)? 我现在很绝望。

感谢您的帮助。

我尝试了一切 叮当声(达尔文)

使用 gcc

带有添加 arm64 作为架构的选项

更改boost的源代码以修复

boost g++ clang arm64
1个回答
0
投票

你几乎得到了一个有效的提升。

无论如何,我安装了 gcc 编译器并尝试使用 gcc 工具集。

./bootstrap --with-toolset=gcc
引导程序有效,但随后运行 b2 脚本会立即导致分段错误,并且在我尝试的每个命令上(甚至 --help 选项都会引发异常...)。

这是由 b2 中的内存损坏错误引起的,这是由于一行草率的 C 代码调用了未定义的行为。只有当 GCC 在 ARM64 Darwin ABI 上使用时才会发生,并且在大多数平台上都是隐藏的,所以它从未被识别过。

早在 2023 年 2 月,我就提交了 b2 的补丁现在修复已包含在 b2 v4.9.4 及更高版本中.

为什么在 arm 芯片组上构建 boost 如此复杂?

缺乏测试,因为它是一个新平台。

我可以做什么来构建 boost(clang 或 gcc,arm 或交叉编译的通用库)?我现在很绝望。

请将您的b2升级到最新版本(目前是4.9.6)再试一次

© www.soinside.com 2019 - 2024. All rights reserved.