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


    编译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
    
    • 1

    查看手机信息,从手机中导出/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})
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    动态库与静态库

    静态库
    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)
    
    • 1

    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)
    
    • 1

    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"------------------------------------------------------"
     
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

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

  • 相关阅读:
    linux平台制作deb包
    希望科怀早日康复
    图文详解 VCF 生信格式 (变异信息)
    MySQL中的日志“binlog”的三种格式这么好玩
    Java基础---File类、文件过滤器、字节流
    Java 最常见的面试题:常用的 jvm 调优的参数都有哪些?
    目录授予777权限却还是无法进入的解决方案
    C++_多态
    2311rust过程宏的示例
    关于Arction的问题(语言-c#)
  • 原文地址:https://blog.csdn.net/qczg_wxg/article/details/126101781