내 ARM64 보드가 32비트 바이너리 컴파일을 지원하는지 어떻게 확인합니까? (오류: 인식할 수 없는 명령줄 옵션 '-m32')

내 ARM64 보드가 32비트 바이너리 컴파일을 지원하는지 어떻게 확인합니까? (오류: 인식할 수 없는 명령줄 옵션 '-m32')

Ubuntu18.04가 설치된 AWS에 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)

구성 옵션이 준비되었음을 나타냅니다.--여러 아키텍처 활성화나는 이것이 다른 아키텍처(32비트 ARM)에 대해 컴파일할 수 있게 해줄 것이라고 생각합니다.

stackoverflow의 또 다른 스레드에서는 일부 ARM64 시스템의 하드웨어가 32비트 응용 프로그램의 컴파일을 지원하지 않을 수 있다고 밝혔습니다.

내 질문은 내 ARM64 시스템이 32비트 애플리케이션을 구축할 수 있는지 어떻게 확인합니까? 만약 건설이 가능하다면 대안은 무엇인가?-m32배너?

답변1

저는 서로 다른 툴체인(arm-linux-gnueabihf 및 arm-linux-gnueabi)을 각각 사용하여 32비트 및 64비트 애플리케이션을 컴파일하여 이 문제를 해결했습니다. 더 좋은 방법이 있는지 확실하지 않습니다.

어쨌든, 내가 사용하고 있는 ARM64 머신의 Cavium 프로세서가 32비트 라이브러리를 지원하지 않기 때문에 이것이 더 이상 필요하지 않습니다. 64비트 버전의 라이브러리를 구할 수 있는 방법을 찾아야 합니다.

관련 정보