王学岗-编译出运行的文件

编译Android需要的库

我们依照上篇博客写的步骤,编译出在Linux中可执行的main文件。然后把它放到手机SDcard 中执行,发现无法执行。
补充:
放到Sdcard中步骤
adb shell
adb sdcard
./main0801
在Linux中可以执行,但在Android无法执行,我们无法跨平台执行。这个时候就用到NDK了。
在Linux系统中下载NDK
wget NDK地址
mv 文件改名字
unzip解压
把NDK解压到目录中。开始编译了
pwd拿到当前文件的路径,
打开vim /etc/profile
配置环境变量
export NDKROOT=/root/study/android-ndk-r25
export PATH= N D K R O O T : NDKROOT: NDKROOT:PATH
在这里插入图片描述
source /etc/profile 保存修改
输入echo $NDKROOT查看是否修改成功
如果输出NDK路径则表示修改成功,如我的路径是:/root/study/android-ndk-r25
编译命令

$NDKROOT/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android26-clang++  main.cpp -o hello

查看手机信息,从手机中导出/system/bin/cat 然后导入Linux系统,在Linux系统中执行file cat命令

CMAKE编译



cmake_minimum_required(VERSION 3.18.1)


project("myapplication")
message("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")#打印日志
message("当前CMAKE的路径是:${CMAKE_SOURCE_DIR}")#打印日志
 
add_library(
        myapplication#最终生成的名字,lib+native-lib.so


        SHARED#动态库


        native-lib.cpp)


find_library(
        log-lib# 变量

        log)#会自动寻找liblog.so库


target_link_libraries(
        myapplication

        ${log-lib})

动态库与静态库

静态库
libxxxxxx.a,包括了很多.o(二进制)文件,在编译的时候,把完整的静态库全部copy一份执行,如果不想对外开放,就使用静态库
动态库
libxxxxx.so,运行的时候才会加载,而且只加载一次,在内存中存在副本。如果有100个地方使用,都是共用的。使用场景:对外开放
编译静态库和动态库

在Android中动态库必须放在jniLibs文件夹下
cmake中导入静态库
add_library(get STATIC IMPORTED)
set_target_properties(get PROPERITIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/静态库路径)
target_link_libraries(
myapplication

  get)

CMAKE中导入动态库
add_library(get SHARED IMPORTED)
set_target_properties(get PROPERITIES IMPORTED_LOCATION C M A K E S O U R C E D I R / / 路径 / {CMAKE_SOURCE_DIR}//路径/ CMAKESOURCEDIR//路径/{CMAKE_ANDROID_ARCH_ABI}/动态库)
target_link_libraries(
myapplication

  get)

java代码中
System.loadLibrary(“get”);

find library找系统的库,add library加载自己的

shell语法

1,执行 /bin/bash a.sh 或者sh a.sh
echo $?上个命令是否执行成功,0表示成功
df -h 用了多少内存
find . -name “*.txt” 查找txt文件
2,shell脚本中

#!/bin/bash
#这句话才叫注释
echo "--------------------------------------------------------------------"
age=99
echo age=$age
echo pwd=$PWD
echo "----------------------------------------------------------------------------------------------"
echo "当前脚本的名称$0"
echo "参数名称$1"
echo "-------------------------------------------------------------"
echo "是否执行成功$?"
echo "穿了什么参数 $*"
echo "传了多少个参数$#"
echo "-----------------------------------------------"
for i in `seq 1 20`
do
        echo "循环遍历的数字是:$i"
done
echo "------------------------------------------------------------"
a=0
for((f=0;f<=100;f++))
do
        a=`expr $f + $a`
done
echo "0-100累加的值是 $a"
echo"------------------------------------------------------"
 

解释型:Shell Script 解释器一.bash 解释器二.sh

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值