我在 AWS 上安装了 Ubuntu18.04 的 ARM 虚拟机。
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)
它表明它是用配置选项--enable-multiarch准备的,我想它应该允许我为不同的架构(32 位 ARM)进行编译。
在 stackoverflow 上的另一个线程上说某些 ARM64 机器的硬件可能不支持 32 位应用程序的编译。
我的问题是如何检查我的 ARM64 机器是否能够构建 32 位应用程序?如果它能够构建,那么-m32标志的替代方案是什么?