在Clion开发工具上使用NDK编译可以在安卓上执行的程序

1. 前言

        因为工作需要,我要将一份C语言代码编译成可执行文件传送到某安卓系统里执行。

        众所周知,使用ndk编译代码有三种使用方式,分别是基于 Make 的 ndk-build、CMake以及独立工具链。以前进行ndk编程都是使用ndk-build进行的,新建jni目录,编写Android.mk和Application.mk,使用Notepad++进行代码编写,然后执行ndk-build进行编译。不过随着项目越来越大,这种基于记事本的编辑简直无法忍受了,于是想到了使用CLion IDE进行代码的编写和编译。CLion使用的是CMake进行项目构建的。

        在ndk r19版本以前,要在CLion上编译ndk只能采用独立工具链的方式,创建独立工具链供CLion调用。

        不过r19之后,ndk的默认工具链都是独立工具链了,不需要再创建了。

        本文记录在Clion开发工具上使用NDK编译可以在安卓上执行程序的配置步骤。

2. NDK下载安装

从以下路径下载NDK

NDK 下载  |  Android NDK  |  Android Developers

选择 Windows 64 位 发表此博客时,最新版本是

android-ndk-r25c-windows.zip

我意外的选了个 不受支持的旧版本android-ndk-r19c,小伙伴们请安装最新的。

下载后解压缩。

然后将解压后的目录配置到系统环境变量 path 中

 CMD执行命令

ndk-build.cmd -v

看看是否安装成功

 OK,显示除了版本号,安装成功。

3.Clion配置与执行

        打开Clion,新建一个C project。

        打开菜单File->Settings->Build,Execution,Deployment->Toolchains,点击加号选择“MinGW”新建一个工具链,如果系统没有MinGW的话,可以点击菜单右边的“Download”,在新打开的网页中点击“Sourceforge”进行下载安装,安装完成后还需要添加环境变量。

        我的环境已经有了MinGw, 工具链配置如下图所示

主要是Make、C Compiler、C++ Compiler这三个路径的配置。

打开菜单File->Settings->Build,Execution,Deployment->CMake,点击加号添加新的CMake项目配置,Name名字随便起。Toolchains选择刚才的工具链配置。 CMake options点击右边的展开,输入以下配置项。

 CMake options配置内容复制如下:

-DCMAKE_TOOLCHAIN_FILE="D:\softwaretmp\android-ndk-r19c-windows-x86_64\android-ndk-r19c\build\cmake\android.toolchain.cmake"
-DCMAKE_SYSTEM_NAME=Android
-DANDROID_ABI=arm64-v8a
-DCMAKE_ANDROID_NDK="D:\softwaretmp\android-ndk-r19c-windows-x86_64\android-ndk-r19"
-DCMAKE_SYSTEM_VERSION=19
-DCMAKE_C_FLAGS=""
-DCMAKE_CXX_FLAGS=""
-DCMAKE_ANDROID_NDK_TOOLCHAIN_VERSION=clang

        其中最重要的是CMAKE_TOOLCHAIN_FILE、CMAKE_SYSTEM_NAME以及ANDROID_ABI这三项的配置,第一个指定ndk的CMake配置文件,它位于/build/cmake/android.toolchain.cmake,第二个是目标系统平台,这里为Android,第三个是架构,这里手机CPU是arm64-v8a架构的,所以用arm64-v8a。

查看CMakelists.txt,如下,未做改动

cmake_minimum_required(VERSION 3.23)
project(C_plus_test)

set(CMAKE_CXX_STANDARD 14)

add_executable(C_plus_test main.cpp)

        配置完成,写一个最简单的hello world程序测试以下:

#include <stdio.h>

int main()
{
    printf("hello world\n");
    return 0;
}

点击编译:

执行日志:

"D:\Program Files\JetBrains\CLion 2022.2.4\bin\cmake\win\bin\cmake.exe" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_MAKE_PROGRAM=D:/softwaretmp/android-ndk-r19c-windows-x86_64/android-ndk-r19c/prebuilt/windows-x86_64/bin/make.exe -DCMAKE_C_COMPILER=D:/softwaretmp/android-ndk-r19c-windows-x86_64/android-ndk-r19c/toolchains/llvm/prebuilt/windows-x86_64/bin/clang.exe -DCMAKE_CXX_COMPILER=D:/softwaretmp/android-ndk-r19c-windows-x86_64/android-ndk-r19c/toolchains/llvm/prebuilt/windows-x86_64/bin/clang++.exe -DCMAKE_TOOLCHAIN_FILE=D:\softwaretmp\android-ndk-r19c-windows-x86_64\android-ndk-r19c\build\cmake\android.toolchain.cmake -DCMAKE_SYSTEM_NAME=Android -DANDROID_ABI=arm64-v8a -DCMAKE_ANDROID_NDK=D:\softwaretmp\android-ndk-r19c-windows-x86_64\android-ndk-r19 -DCMAKE_SYSTEM_VERSION=19 -DCMAKE_C_FLAGS= -DCMAKE_CXX_FLAGS= -DCMAKE_ANDROID_NDK_TOOLCHAIN_VERSION=clang -G "CodeBlocks - MinGW Makefiles" -S C:\Users\harry_zhang\CLionProjects\C_plus_test -B C:\Users\harry_zhang\CLionProjects\C_plus_test\cmake-build-debug-mingw
-- ANDROID_PLATFORM not set. Defaulting to minimum supported version
16.
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: D:/softwaretmp/android-ndk-r19c-windows-x86_64/android-ndk-r19c/toolchains/llvm/prebuilt/windows-x86_64/bin/clang.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: D:/softwaretmp/android-ndk-r19c-windows-x86_64/android-ndk-r19c/toolchains/llvm/prebuilt/windows-x86_64/bin/clang++.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: C:/Users/harry_zhang/CLionProjects/C_plus_test/cmake-build-debug-mingw

[Finished]

由于ANDROID_PLATFORM没有设置,系统默认取最小值16。

根据编译打印的最后一行,打开目录 C:/Users/harry_zhang/CLionProjects/C_plus_test/cmake-build-debug-mingw

这里的C_plus_test就是生成的文件。这个名字是我clion新建项目时随便取的。

4.adb传送到安卓设备调试成功

devicename:/data/local/tmp # ls -l | grep C_plus_test
-r--r--r-- 1 shell shell     10344 2023-03-21 19:18 C_plus_test
devicename:/data/local/tmp # chmod +x C_plus_test
devicename:/data/local/tmp # ./C_plus_test
hello world

执行成功。

5.最后

        其实我的安卓环境应该 APP_PLATFORM=android-29,但是低版本也是可以执行的。

        如果你想改会原来的编译和执行环境,可以选择Custom Compier,打勾保存,即可。

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 如果您在使用 CLion 编译 Qt 程序时遇到错误,请检查以下内容: 1. 确保已经安装了 Qt 库和相关的开发工具,并已正确配置环境变量。 2. 检查代码是否有语法错误,是否有找不到的头文件和未定义的符号。 3. 确保 CLion 已经正确配置了 Qt 库路径,并使用了正确的编译器。 4. 检查是否在项目文件中包含了正确的 qmake 文件。 如果以上步骤都无法解决问题,请在问题发生时的错误信息,以及代码的相关部分提供给我,我将尽力为您解答。 ### 回答2: 在使用CLion编译Qt程序时,常见的错误有很多种,下面列举一些可能遇到的问题和解决方法。 1. 编译器选择错误:CLion默认使用CMake来构建项目,但Qt通常使用qmake构建项目。需要在CMakeLists.txt中添加相关Qt模块的库和头文件路径。 2. Qt模块缺失:CLion可能无法找到Qt的一些模块,导致编译错误。需要在CMakeLists.txt中添加相关的模块。 3. Qt版本不匹配:如果您的项目使用的Qt版本与CLion支持的版本不匹配,可能会导致编译错误。请确保您的Qt版本与CLion兼容。 4. 编译器标志设置错误:有时,编译器标志设置不正确也会导致编译错误。请检查您的CMakeLists.txt文件中的编译器标志设置是否正确。 5. 缺少库文件:如果项目依赖于某些库文件,但CLion无法找到这些文件,可能会导致编译错误。请确保库文件正确安装,并在CMakeLists.txt文件中添加相关的库路径。 以上是一些常见的CLion编译Qt程序报错的问题及解决方法,希望对您有帮助。如果还有其他问题,请提供具体错误信息以便进一步排查。 ### 回答3: 要回答关于CLion编译QT程序报错的问题,首先我们需要了解报错的具体内容。不同的报错可能对应着不同的问题。 首先,我们需要确保在CLion中正确设置了QT的路径。在CLion的设置中,找到"Build, Execution, Deployment",然后选中"Toolchains"。确保你已经正确地设置了QT的路径。同时,确保你已经在CMakeLists.txt文件中包含了正确的QT模块。 其次,检查报错信息中提到的具体问题。报错信息可能会有诸如未定义的引用、找不到头文件等等。根据报错信息,逐一解决问题。你可能需要检查你的代码中是否有语法错误,或者是否正确地引入了需要的头文件。 如果报错信息中包含了特定的函数或类,可以在QT官方文档中查找该函数或类的定义和用法。确保你正确地使用了这些函数或类。 此外,还可以尝试清除CLion的缓存并重新编译项目。有时候缓存可能会导致一些奇怪的问题。 最后,如果以上步骤都没有解决问题,可以尝试在相关的编译器环境下手动编译和运行代码。通过这种方式,你可以更直观地看到报错信息,并更容易找到问题所在。 总之,解决CLion编译QT程序报错的方法需要根据具体的报错信息来确定。通过逐一检查代码、设置和环境,通常能够找到解决问题的办法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值