linux下搭建ndk环境编译c++库给安卓使用,ndk编译c++程序,不使用Jni

Unsupported Downloads · android/ndk Wiki · GitHub

window 10 下安装 Ubuntu 22.04 使用 NDK r24 编译FFmpeg 5.1 - 简书 (jianshu.com)

下载完ndk r24后,编写build.sh,执行

#!/bin/bash

BASEPATH=../

NDKPATH=/home/sunsy/ndk/android-ndk-r24
#NDKPATH=/d/androidsdk/ndk/21.0.6113669/

CMAKEPATH=/usr/bin
#CMAKEPATH=/d/androidsdk/cmake/3.22.1/bin

PLATFORM=arm64-v8a

#BUILDTYPE=Debug
#	-DCMAKE_BUILD_TYPE=${BUILDTYPE} \

${CMAKEPATH}/cmake \
	-DCMAKE_TOOLCHAIN_FILE=${NDKPATH}/build/cmake/android.toolchain.cmake \
	-DANDROID_ABI=${PLATFORM} \
	-DANDROID_NDK=${NDKPATH} \
	-DANDROID_NATIVE_API_LEVEL=31 \
	-DANDROID_PLATFORM=android-31 \
	-DANDROID_STL=c++_shared \
	-DNDK_PATH=${NDKPATH} \
	-DANDROID_TOOLCHAIN=clang \
	-DCMAKE_INSTALL_PREFIX=${BASEPATH}/out/ \
	${BASEPATH}

#make
#make VERBOSE=1
#make install


然后,make 编译出来的就是arm 可执行程序.

参考链接

MSM8916 海信M9模块学习记录四:ubuntu16.04 64位下配置NDK-r16b_tudouniS的博客-CSDN博客

(676条消息) android .vsh文件是什么,在Android9下用ndk编译vSomeIP和CommonAPI以及使用例子_小小牵牛星的博客-CSDN博客

官网下载ndkr16b

Unsupported Downloads · android/ndk Wiki · GitHub

解压完以后放到/opt目录下

vim /etc/profile

export NDK_HOME=/opt/android-ndk-r16b  #(就是解压出来之后的文件夹路径,这里是要改的)
export PATH=$PATH:$NDK_HOME

source /etc/profile

ndk-build -v 

https://www.cnblogs.com/guanglun/p/9340079.html

export PATH=/opt/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin:$PATH

arm-linux-androideabi-gcc -pie -fPIE --sysroot=/home/guanglun/workspace/rk3399/android-ndk-r13b/platforms/android-24/arch-arm -o hello hello.c

执行失败

先生产工具链cd /opt/android-ndk-r16b

# build/tools/make-standalone-toolchain.sh --toolchain=arm-linux-androideabi-4.9 --platform=android-21 --install-dir=../android-toolchain-r16b/android-armv7 --arch=arm
HOST_OS=linux
HOST_EXE=
HOST_ARCH=x86_64
HOST_TAG=linux-x86_64
HOST_NUM_CPUS=3
BUILD_NUM_CPUS=6
Toolchain installed to ../android-toolchain-r16b/android-armv7.
root@deyi-virtual-machine:/opt/android-ndk-r16b# 
cd /opt/android-toolchain-r16b/android-armv7

export PATH=/opt/android-toolchain-r16b/android-armv7/bin:$PATH
export SYSROOT=/opt/android-toolchain-r16b/android-armv7/sysroot

arm-linux-androideabi-gcc -pie -fPIE --sysroot=$SYSROOT -o hello hello.c
编译成功

参考例子

GitHub - MingHuang1024/CrossCompileForAndroid: 使用独立工具链交叉编译可在android系统中运行的so包

cmake_minimum_required(VERSION 3.4.1)

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99")

# Android 5.0 以上需要在此处设置 PIE
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIE")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fPIE -pie")

# 配置使用 NDK Standalone Toolchain 编译
set(NDK_STANDALONE_TOOLCHAIN /tmp/ndk-hm/arm-linux-androideabi)
set(CMAKE_SYSTEM_NAME Android)
set(CMAKE_SYSTEM_VERSION 21)
set(CMAKE_C_COMPILER ${NDK_STANDALONE_TOOLCHAIN}/bin/clang)
set(CMAKE_CXX_COMPILER ${NDK_STANDALONE_TOOLCHAIN}/bin/clang++)
set(CMAKE_FIND_ROOT_PATH ${NDK_STANDALONE_TOOLCHAIN})

# 使用 NDK 提供的头文件
add_definitions("--sysroot=${NDK_STANDALONE_TOOLCHAIN}/sysroot")

add_library(myso SHARED CTest.c)

set_target_properties(myso
                      PROPERTIES
                      LIBRARY_OUTPUT_DIRECTORY
                      "${CMAKE_CURRENT_SOURCE_DIR}/lib")

include_directories(/home/hm/JDK/jdk1.8.0_151/include /home/hm/JDK/jdk1.8.0_151/include/linux)

target_link_libraries(myso
                     log)

NDK/build/tools/make-standalone-toolchain.sh  --platform=android-23  --arch=arm64   --ndk-dir=/home/chengli/SoftWare/NDK/android-ndk-r12b  --install-dir=/home/name/SoftWare/NDK/android-ndk-r12b/tmp/toolchain

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
首先,您需要将您的 C 代码编写好,并确保它可以在 Android 平台上编译通过。 然后,您需要在 Android Studio 中配置 NDK。在 Android Studio 中,选择 File -> Project Structure,然后选择 SDK Location。在这个页面中,您可以看到 NDK 的路径,如果您还没有安装 NDK,可以点击 Download,然后选择需要下载的版本。 接下来,您需要创建一个 JNI 文件夹,并将您的 C 代码放在其中。然后,在您的项目的 build.gradle 文件中添加以下行: ```gradle android { ... defaultConfig { ... externalNativeBuild { cmake { cppFlags "-std=c++11" // 如果需要的话 arguments "-DANDROID_PLATFORM=android-21", "-DANDROID_TOOLCHAIN=clang", "-DANDROID_STL=c++_shared" } } } ... externalNativeBuild { cmake { path "CMakeLists.txt" } } } ``` 在这个文件中,您需要指定您的 CMakeLists.txt 文件的路径,并设置一些 CMake 变量来指定您的 NDK 版本、工具链和 STL 。 最后,在您的 CMakeLists.txt 文件中,您需要指定您的 C 代码的位置,并将其编译为共享。例如: ```cmake cmake_minimum_required(VERSION 3.4.1) add_library(mylibrary SHARED src/main/jni/mylibrary.c) target_link_libraries(mylibrary android log) ``` 这个示例假设您的 C 代码位于 src/main/jni/mylibrary.c 文件中,并且它将被编译为名为 mylibrary 的共享。 您可以使用 Android Studio 的 Build -> Make Project 命令来编译您的项目和 C 代码。如果一切顺利,您将在您的项目的 build/intermediates/cmake 目录中找到您的共享
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值