交叉编译:特殊的交叉编译器或只是带有选项 -march 的 gcc?
Posted
技术标签:
【中文标题】交叉编译:特殊的交叉编译器或只是带有选项 -march 的 gcc?【英文标题】:Cross compilation: special cross compiler or just gcc with option -march? 【发布时间】:2019-03-02 10:23:32 【问题描述】:我需要在Linux机器上为Raspberry PI 3+编译一个程序,代码必须符合c++17标准。官方工具链已过时,缺少 c++17 编译选项。我现在可以看到的两个解决方案是:
1) gcc 有一个选项 -march,此处描述:https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html
2) 安装 arm-linux-gbueabi-gcc 包,这里建议:Cross-compiling for Raspberry pi with modern gcc
两个选项有什么区别?还有其他可行的方法吗?
【问题讨论】:
你可以在 Pi 上安装一个现代编译器(如果它正在运行一个相当新的发行版,它可能已经有一个)然后简单地在 Pi 上编译代码. 这就是重点,因为在 Pi 上我的项目需要 12 多个小时才能编译,而且每次更改代码都会很痛苦。 那很痛苦。但是,如果需要 12 个小时,我会想象您有一些构建系统问题可以解决以使其更快。喜欢:安装和使用ccache
它对后续构建有很大帮助。确保您的构建系统依赖项是正确的,以便您只重建需要的内容。在可能的情况下,广泛使用前向声明、外部模板等,而不是包括完整的定义。不要包含不需要的标题。等等等等。做这些事情也会加快你的非 Pi 构建。
C++ 构建很容易变慢,但可以通过一些努力使其变快(呃)(明显如此)。 6 年前,我使用的大约 500K 行代码库过去需要大约 40 分钟才能在 32 核机器上构建。我们已经将完整构建(在 20 核机器上)的时间缩短到大约 10 分钟,对于大多数带有微小更改的重建,我们将其缩短到 3 分钟。这需要一些工作,但最终结果是巨大的进步。
从零开始编译opencv的代码(最新代码,不断变化),还有一些模板,增加了时间。反正在树莓派上编译比较容易,但是时间很宝贵
【参考方案1】:
如果您想为您的 Raspberry Pi 提供完整的 Cross Compiler c++17 标准,您可以尝试我最新的用于 Raspberry Pi 的预构建/预编译开源 GCC 工具链以及来自此 Github Repo 的详细说明:
目前可用的 GCC 版本如下:
GCC 6.3.0 GCC 7.4.0 GCC 8.2.0 GCC 8.3.0以及支持的环境:
交叉编译器:目前支持所有 Linux 发行版 (x32/x64)。 Native-Compiler:支持所有带有 Raspbian OS 的 Raspberry Pi 版本/型号。其他操作系统可能/可能不工作。目前支持的语言还有:
C++ C Fortran【讨论】:
以上是关于交叉编译:特殊的交叉编译器或只是带有选项 -march 的 gcc?的主要内容,如果未能解决你的问题,请参考以下文章