Clion集成NDK环境进行c++开发

一、创建项目

二、配置CMakeLists.txt

官方文档说明:https://cmake.org/cmake/help/v3.19/manual/cmake-toolchains.7.html#cross-compiling-for-android

android ndk里面只支持3.10.2,所以要设置cmake版本

cmake_minimum_required(VERSION 3.10.2)

mac开发给Android或者Linux系统用,自然就有生成so动态库的需求,以Android为例,修改CMakeLists如下(碰到的大坑:set 命令要放在project命令前面,否则可能不生效,因为命令行可以但CmakeLists不行所以发现了这个大坑)

cmake_minimum_required(VERSION 3.10.2)


set(CMAKE_CXX_STANDARD 11)

set(NDK_PATH /Users/lingmin/Library/Android/sdk/ndk/android-ndk-r20b)

#32位
#set(CMAKE_C_COMPILER ${NDK_PATH}/toolchains/llvm/prebuilt/darwin-x86_64/bin/armv7a-linux-androideabi21-clang)
#set(CMAKE_CXX_COMPILER ${NDK_PATH}/toolchains/llvm/prebuilt/darwin-x86_64/bin/armv7a-linux-androideabi21-clang++)

#64位
set(CMAKE_C_COMPILER ${NDK_PATH}/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android21-clang)
set(CMAKE_CXX_COMPILER ${NDK_PATH}/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android21-clang++)
#add_definitions("--sysroot=/ndk/sysroot")


#https://cmake.org/cmake/help/v3.19/manual/cmake-toolchains.7.html#cross-compiling-for-android
set(CMAKE_SYSTEM_NAME Android)
set(CMAKE_SYSTEM_VERSION 21) # API level
#set(CMAKE_ANDROID_ARCH_ABI armeabi-v7a)
set(CMAKE_ANDROID_ARCH_ABI arm64-v8a)

set(CMAKE_ANDROID_NDK ${NDK_PATH})
#set(CMAKE_ANDROID_STL_TYPE c++_shared)#动态库
set(CMAKE_ANDROID_STL_TYPE c++_static)

set(CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION clang)

project(c_android_2)


set(SOURCE_FILES
        main.cpp
        #native_c.cpp #多个cpp在这里添加
        )

add_executable(c_android_2 ${SOURCE_FILES})

#生成静态库
#add_library(clion STATIC ${SOURCE_FILES})
#生成动态库
add_library(clion SHARED ${SOURCE_FILES})

三、写代码

正常引入jni

四、编译静态库.a/动态库.so

在mac上编译出来的是.dylib

编译结果:

查看文件类型:arm 64位

最后把dylib丢到android项目里面,后缀改为so调用,会出现链接不到动态库找不方法的问题,原因还未知,继续研究。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值