当前位置: 首页 > news >正文

linux下cmake编译64位,32位,ARM,ARM64程序

准备工作

gnu提供不同平台的编译工具,为同一平台打造不同的程序提供条件,它可以提供64位,32位,x86与arm平台编译.
本次测试环境为 debian 6.1 x86_64系统,当测试时我们需要安装以下环境:

安装基本依赖

sudo apt install module-assistant build-essential

安装x64位gcc/g++
系统为64位系统默认安装了64位gcc, 但如果没有安装则可以按照下面进行安装

sudo apt install gcc g++
gcc --version
g++ --version

安装x86 32位gcc/g++
在64位系统中需要编译32位程序则需要安装gcc-multilib与g+±multilib

sudo apt install gcc-multilib g+±multilib
gcc -m32 --version
g++ -m32 --version

安装arm 32位gcc/g++
gnu的arm 32工具链有 gcc-arm-linux-gnueabihf与g+±arm-linux-gnueabihf

sudo apt install gcc-arm-linux-gnueabihf g+±arm-linux-gnueabihf
arm-linux-gnueabihf-gcc --version
arm-linux-gnueabihf-g++ --version

安装arm 64(aarch64)位gcc/g++
gnu的arm 64工具链有 gcc-aarch64-linux-gnu与g+±aarch64-linux-gnu:

sudo apt install gcc-aarch64-linux-gnu g+±aarch64-linux-gnu
aarch64-linux-gnu-gcc --version
aarch64-linux-gnu-g++ --version

cmake配置编译不同平台程序

CMakeLists.txt配置

编译32位程序
cmake可以通过CMakeLists.txt文件配置在64位系统中编译32位程序,可以在CMakeLists.txt文件中增加以下语句:

set(GCC_COVERAGE_COMPILE_FLAGS "-m32")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}")

编译arm32程序
cmake可以通过CMakeLists.txt文件配置使用编译工具链,以便在x86_64的系统中编译arm,可以在CMakeLists.txt文件中增加以下语句:

set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)
set(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc)
set(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++)

编译arm64(aarch64)程序
CMakeLists.txt文件配置使用编译工具链gcc-aarch64-linux-gnu与g+±aarch64-linux-gnu以便编译aarch64程序,可以在CMakeLists.txt文件中增加以下语句:

set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR aarch64)
set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)

以上为使用CMakeLists.txt修改配置完成不同版本程序编译配置.

cmake命令行设置

cmake命令行可以通过-D参数实现上面的变量配置,与CMakeLists.txt实现方式完全相同,因而可以参照上面的配置修改命令来达到不同版本程序,以下以opencv编译为例说明
编译32位程序

cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=./bin -DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.x/modules -DWITH_GTK=ON -DWITH_GTK_2_X=ON -DCMAKE_C_FLAGS="${CMAKE_C_FLAGS} -m32" -DCMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -m32"  ..

编译arm32程序

cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=./bin -DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.x/modules -DWITH_GTK=ON -DWITH_GTK_2_X=ON -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=arm -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc  -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ ..

编译arm64(aarch64)程序

cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=./bin -DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.x/modules -DWITH_GTK=ON -DWITH_GTK_2_X=ON -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=aarch64 -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc  -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ ..

PS:网上有人说可以使用以下方式编译32或64位程序,但我没有试验成功:
x86

cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=./bin -DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.x/modules -DWITH_GTK=ON -DWITH_GTK_2_X=ON -DCMAKE_GENERATOR_PLATFORM=X86  ..

x64

cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=./bin -DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.x/modules -DWITH_GTK=ON -DWITH_GTK_2_X=ON -DCMAKE_GENERATOR_PLATFORM=X64  ..

http://www.mrgr.cn/news/44987.html

相关文章:

  • 什么是 JavaScript 的数组空槽
  • 请散户股民看过来,密切关注两件大事
  • 机器学习——自监督学习与无监督学习
  • 父子进程之间关于对全局变量的修改同步问题
  • c++包管理工具conan
  • 【超详细】基于YOLOv11的PCB缺陷检测
  • RK3568笔记六十四:SG90驱动测试
  • 数据校验的总结
  • 【C语言】自定义类型:结构体
  • 国庆期间的问题,如何在老家访问杭州办公室的网络呢
  • 【AI知识点】激活函数(Activation Function)
  • 基于LORA的一主多从监测系统_框架搭建
  • STM32 HAL 内部FLASH傻瓜式教程 各种型号单片机都适用主要解决网上例程HAL库无法写入问题
  • 【探测器】线阵相机中的 TDI 技术
  • AIGC与BI的融合:永洪开启数据智能新时代
  • Django学习笔记十三:优秀案例学习
  • HCIP-HarmonyOS Application Developer 习题(七)
  • ASK, PSK, FSK, DPSK
  • AI写作工具大比拼:揭秘Claude的神秘魅力以及如何订阅Claude
  • C语言的柔性数组