【linux Cmake交叉编译文件到手机运行】

前言:

在linux上编译一个可执行文件很简单:

clang++ main.cpp -o main
生成了main的可执行文件

交叉编译其实也是一样的过程,但不一样的就是环境和编译器的选择。

STEP1 交叉环境的搭建

交叉编译实际上就是在这台系统的环境下,编译出另一个系统的文件,并且在另一个系统上能够运行,因此,编译andorid 的可执行文件,就需要有andorid的环境,这个环境就是android NDK。
在这个网站上下载NDK,并且解压出来:

https://developer.android.google.cn/ndk/downloads?hl=zh-cn

STEP2 Cmake的编写

Cmake主要是生成mkfile的,他会把CMakeLists.txt 做成makefile文件。

#****************************This is Project Info****************************
cmake_minimum_required(VERSION 3.4)

# 设置项目名称和版本  
project(app1 VERSION 1.0)

set(NDK_PATH /home/dzk/disk/android_ndk)

#STEP 1设置交叉编译环境和工具
set(CMAKE_SYSTEM_NAME Android)            #要构建的目标平台,比如要构建成android平台的
set(CMAKE_SYSTEM_PROCESSOR arm)           #是要构建的目标体系结构,这个平台是什么架构,一般是arm
set(CMAKE_ANDROID_ARCH_ABI armeabi-v7a)   #编译的二进制接口(armeabi-v7a、arm64-v8a、x86、x86_64)
set(CMAKE_ANDROID_NDK /home/dzk/disk/android_ndk/android-ndk-r26d)   #andorid ndk的位置,可以从https://developer.android.google.cn/ndk/downloads?hl=zh-cn 下载最新的

#STEP 2选用编译器,我选用的是clang++ 的编译器,当然也可以选择g++的,只不过android NDK 后面好像不支持g++了
#这里有个重点,即尽量选用NDK 里面的clang++, 如果不使用NDK 的clang,就会出现生成的可执行文件64位和32位不匹配的问题
set(triple arm-linux-gnueabihf)
set(CMAKE_ANDROID_TOOLCHAIN /home/dzk/disk/android_ndk/android-ndk-r26d/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang++)
set(CMAKE_CXX_COMPILER /home/dzk/disk/android_ndk/android-ndk-r26d/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang++)
set(CMAKE_CXX_COMPILER_TARGET ${triple})

set(CMAKE_SYSTEM_VERSION 21) # API level 21, 这里和上面的版本是一致的,也可以不一样

#set(CMAKE_ANDROID_STL_TYPE gnustl_static) #制定的c++ stl 库类型,可以设置

#大概意思可能是选用NDK 里面的cmake,我试过不加好像也可以
#set(CMAKE_TOOLCHAIN_FILE /home/dzk/disk/android_ndk/android-ndk-r26d/build/cmake/android.toolchain.cmake)

#STEP3 编译
add_executable(myapp 
				main.cpp
				)  

STEP3 编译

我的目录是这样的
myapp
|–build
|–CMakeLists.txt
|–main.cpp

这个build的目录是空的,一般切到build目录下,运行

cmake ..      //生成make file
make   //make 编译

STEP4 编译文件推到手机里面运行

adb push myapp vendor/bin
adb shell myapp
  • 10
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Linux上使用CMake进行交叉编译PySide2,您可以按照以下步骤进行操作: 1. 首先,确保您已经安装了CMake交叉编译工具链。根据您的目标平台,可能需要安装特定的交叉编译工具链。例如,在交叉编译ARM平台的情况下,您可能需要安装ARM交叉编译工具链。 2. 创建一个用于构建PySide2的目录,并进入该目录: ``` mkdir build cd build ``` 3. 设置交叉编译工具链: ``` export CC=<path_to_cross_compiler> export CXX=<path_to_cross_compiler> ``` 其中,`<path_to_cross_compiler>`是您安装的交叉编译工具链的路径。 4. 使用CMake生成Makefile,并指定交叉编译相关的参数: ``` cmake \ -DCMAKE_SYSTEM_NAME=<target_system_name> \ -DCMAKE_C_COMPILER_WORKS=1 \ -DCMAKE_CXX_COMPILER_WORKS=1 \ -DCMAKE_INSTALL_PREFIX=<install_prefix> \ <path_to_pyside2_source> ``` 其中,`<target_system_name>`是目标系统的名称(如arm-linux-gnueabi),`<install_prefix>`是PySide2安装的目标路径,`<path_to_pyside2_source>`是PySide2源代码的路径。 5. 运行make命令进行交叉编译: ``` make ``` 6. 编译完成后,您可以将生成的库文件和相关文件复制到目标系统上,并在目标系统上进行使用。 请注意,交叉编译可能涉及到更多的配置和设置,具体步骤可能因您的目标平台和工具链而有所不同。确保按照PySide2官方文档提供的指南进行操作,并根据需要进行调整。 如果您遇到任何问题,请随时提问!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值