如何检查我的ARM64板是否支持32位二进制编译? (错误:无法识别的命令行选项“-m32”)

如何检查我的ARM64板是否支持32位二进制编译? (错误:无法识别的命令行选项“-m32”)

我在AWS上有一个ARM虚拟机,安装了Ubuntu18.04。

dpkg 和 uname 命令显示了这一点,

$ dpkg --print-architecture
arm64
$ uname -m
aarch64

我有一个为 32 位构建的第三方预编译静态库 (.a)。

我知道我无法将 32 位库链接到 64 位应用程序,因此我创建了一个新应用程序,它将链接该库并编译为 32 位。该应用程序将使用某种 IPC 机制与其余应用程序(64 位)进行通信。为了编译这个应用程序,我在我的 cmake 文件中添加了以下标志,

set (CMAKE_CXX_FLAGS "-m32")

但编译器抛出这个错误,

c++: error: unrecognized command line option ‘-m32’

我的机器上的 c++ 版本是,

$ c++ -v
Using built-in specs.
COLLECT_GCC=c++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/aarch64-linux-gnu/7/lto-wrapper
Target: aarch64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 7.4.0-1ubuntu1~18.04.1' --with-bugurl=file:///usr/share/doc/gcc-7/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --program-suffix=-7 --program-prefix=aarch64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-libquadmath --disable-libquadmath-support --enable-plugin --enable-default-pie --with-system-zlib --enable-multiarch --enable-fix-cortex-a53-843419 --disable-werror --enable-checking=release --build=aarch64-linux-gnu --host=aarch64-linux-gnu --target=aarch64-linux-gnu
Thread model: posix
gcc version 7.4.0 (Ubuntu/Linaro 7.4.0-1ubuntu1~18.04.1)

它表明它已准备好配置选项--启用多架构我想这应该允许我针对不同的体系结构(32 位 ARM)进行编译。

stackoverflow 上的另一个线程表示某些 ARM64 机器的硬件可能不支持 32 位应用程序的编译。

我的问题是如何检查我的 ARM64 机器是否能够构建 32 位应用程序?如果它能够建造那么有什么替代方案-m32旗帜?

答案1

我通过使用不同的工具链编译 32 位和 64 位应用程序解决了这个问题 - 分别是arm-linux-gnueabihf 和arm-linux-gnueabi。不确定是否存在更好的方法。

不管怎样,我不再需要这个了,因为我使用的 ARM64 机器的 Cavium 处理器不支持 32 位库。我必须找到一种方法来获取 64 位版本的库。

相关内容