Ubuntu
如何檢查我的 ARM64 板是否支持 32 位二進制編譯?(錯誤:無法辨識的命令行選項’-m32’)
我在 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***標誌的替代方案是什麼?
我通過使用不同的工具鏈來編譯 32 位和 64 位應用程序解決了這個問題——分別是 arm-linux-gnueabihf 和 arm-linux-gnueabi。不確定是否存在更好的方法。
無論如何,我不再需要這個了,因為我正在使用的 ARM64 機器的 Cavium 處理器不支持 32 位庫。我將不得不找到一種方法來獲得 64 位版本的庫。