aarch64-linux-gnu-g++ 交叉编译为 arm64 错误

Posted

技术标签:

【中文标题】aarch64-linux-gnu-g++ 交叉编译为 arm64 错误【英文标题】:aarch64-linux-gnu-g++ cross compiling to arm64 error 【发布时间】:2020-11-19 21:24:51 【问题描述】:

我正在尝试使用 aarch64-linux-gnu-g++ 将 cpp 代码从 Centos 7 交叉编译到 arm64。

我已经安装了 gcc-aarch64-linux-gnu 和 gcc-c++-aarch64-linux-gnu。编译时出现找不到c++头文件的错误。

[root@server app]# aarch64-linux-gnu-g++ -fPIC -shared -pthread -I /usr/lib/gcc/aarch64-linux-gnu/4.8.5/include -I /usr/local/ssl/include -I /usr/java/jdk1.8.0_91/include -I  /usr/java/jdk1.8.0_91/include/linux -L /usr/local/ssl/lib -l:libcrypto.so -l:libssl.so *.cpp
In file included from cms_functions.h:4:0,
                 from cms_functions.cpp:2:
ocsp_functions.h:8:24: fatal error: sys/socket.h: No such file or directory
 #include <sys/socket.h>
                        ^
compilation terminated.
In file included from crl_functions.cpp:2:0:
crl_functions.h:8:24: fatal error: sys/socket.h: No such file or directory
 #include <sys/socket.h>
                        ^
compilation terminated.
In file included from crypto_functions.cpp:1:0:
crypto_functions.h:4:20: fatal error: iostream: No such file or directory
 #include <iostream>

有什么想法吗?

谢谢

【问题讨论】:

【参考方案1】:

默认情况下,包 gcc-c++-aarch64-linux-gnu 将只安装编译器。

您需要为 aarch64 的交叉编译器安装 glibc 头文件。 可能您需要安装glibc-aarch64-linux-gnu-2.24-2.sdl7.2.noarch.rpmglibc-aarch64-linux-gnu-devel-2.24-2.sdl7.2.noarch.rpm。 sys/socket.h 存在于第二个包中。

据我所知,对于 centos 7,没有直接带有 libstdc ++ 标头的 rpm 包。一种解决方案是直接从源代码交叉编译 libstd ++。

【讨论】:

我尝试安装 glibc-headers-2.17-317.el7.aarch64.rpm 但它失败了,因为它是我的 x86 运行 centos 的开发机器上的错误拱形类型。我的系统已经安装了 glibc-headers-2.17-317.el7.x86_64。 我更新了我的答案。抱歉,我没有看到您正在交叉编译 我安装了两个 rpm,它解决了之前的错误。现在它抱怨找不到 iostream 和 cstring 头文件。它仍然缺少 aarch64 的 c++ 包含/库文件吗?谢谢。

以上是关于aarch64-linux-gnu-g++ 交叉编译为 arm64 错误的主要内容,如果未能解决你的问题,请参考以下文章

交叉编译Python-3.6.0到aarch64/aarch32 —— 支持sqlite3

ARM交叉编译工具链

Linux aarch64交叉编译之libusb库

经验分享华为atlas500系列aarch64交叉编译opencv

Linux aarch64交叉编译之 cryptopp加密库

Linux aarch64交叉编译之glm数学库