美文网首页
LINUX 命令以及交叉编译

LINUX 命令以及交叉编译

作者: 星云春风 | 来源:发表于2020-06-01 23:58 被阅读0次
  • 查看全部文件(包含隐藏文件)
    ls -all
  • 查看全部文件 (不包含隐藏文件)
    ls -ls
  • 查看所有文件(可以看到具体大小,不包含隐藏文件)
    ls -lh
  • 上传文件 (centos的 )
    需要先安装lrzsz( yum -y install lrzsz ) ,然后使用命令 rz
  • 导出文件
    sz 文件名
  • 删除文件
    rm -rf 文件名
  • 清除命令行
    clear
  • 创建文件夹
    mkdir 名称
  • 下载文件
    wget 链接地址
  • 定义临时环境变量 ,只能在当前终端使用
    export AAA =123456
  • 使用临时变量
    echo $AAA
  • 定义全局变量
    vim /etc/profile
    i
    export student = " Student is ok "
    按esc 输入: wq
    让定义生效 source /etc/profile
    echo $student
  • 权限说明
-rw-r--r-- 1 root root    6 Jun  1 22:55 test.txt
- 文件
d 代表文件夹 目录
- 
rw- 1.当前自身所在用户的权限
r-- 2.代表同组的权限
r-- 3.其他用户的权限

r 可以读
w 可以写
x 可执行


chmod 777 test.txt  最高权限的配置
-rwxrwxrwx 1 root root    6 Jun  1 22:55 test.txt

chmod 477 test.txt

4 可读 2 可写 1可执行

chmod 111 test.txt

chmod +x test.txt 给三组都分配了,可执行权限

chmod u=r test.txt 当前所在用户 给一个 读的权限

chmod u=r,g=r,o=r test.txt 给三组都分配了读的权限
  • 查看文件
    cat 名称
  • VIM命令
一进入VIM编辑器的是,默认是命令模式
i 编辑的意思
a 追加的意思
:w 就是保存的意思
:q 退出的意思
:q! 强制退出,不管有没有保存
:set number 显示行号
:100 回到100行(不能使用小键盘,回到指定的行数)


命令模式下:
    1.gg:跳转到最上面
    2.G:跳转到最下面
    3.k:上一行
    4.j:下一行
    5.h:左边,  l:右边

注意点:1.不小心按到 Ctrl + S / Ctrl + 其他  会出现 死机的现象
2.不要操作小键盘
  • 编译的原理
编译(把人写的代码,变成,机器可以认识的指令) Linux(gcc),Mac(Clang)
1.预处理阶段(include,宏 ....)
    gcc -E Test.c -o Test.i

2.编译阶段,编译之后(汇编代码)
    gcc -S Test.i -o Test.s

3.汇编处理阶段,把汇编代码处理成计算机认识的01010101机器码
    gcc -c Test.s -o Test.o

4.链接阶段,打出可以执行的包
    gcc -C Test.o -o Test  得到可执行的程序Test
      执行程序Test
    ./Test

一条命令执行上面四个步骤: gcc Test.c -o Test
  • 重命名
    mv oldName newName
  • 解压文件
    unzip 文件名称 或者 tar xvf 名称
  • 获取当前路径
    pwd
  • 交叉编译(linux 和 Android)生成可执行文件后,导入手机,建议放在手机的 /data/local/tmp/目录下,然后执行chmod 777 ,可以运行,否则需要手机完全root。
# 手机一般都是ARM的 ,模拟器是x86 或者x86_64的,这里是以手机为主的,选择toolchains下的arm
export NDK_GCC_arm_64="/root/xiachenhui/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc"
# --sysroot=路径(自动寻找头文件和库文件 .h/.so) 
#  -isystem 寻找指定目录的头文件)后面需要一个空格
#  如果同时设置--sysroot=路径 和 -isystem ,会用-isystem 的头文件覆盖--sysroot=的头文件,
#最终是使用--sysroot=的库文件, -isystem的头文件
# 以上配置,asm会无法引入,报错的原因是:C源码内部需要引入asm ,所以引入了第二个-isystem
export NDK_CFIG_arm_64="--sysroot=/root/xiachenhui/android-ndk-r17c/platforms/android-23/arch-arm -isystem /root/xiachenhui/android-ndk-r17c/sysroot/usr/include -isystem /root/xiachenhui/android-ndk-r17c/sysroot/usr/include/arm-linux-androideabi"
# $NDK_GCC_arm_64 $NDK_CFIG_arm_64 -pie Test.c -o main_exe 生成可执行文件


  • 交叉编译 (针对于32位的模拟器)
#模拟器的配置
export NDK_GCC_x86="/root/xiachenhui/android-ndk-r17c/toolchains/x86-4.9/prebuilt/linux-x86_64/bin/i686-linux-android-gcc"
export NDK_CFIG_x86="--sysroot=/root/xiachenhui/android-ndk-r17c/platforms/android-23/arch-x86 -isystem /root/xiachenhui/android-ndk-r17c/sysroot/usr/include -isystem /root/xiachenhui/android-ndk-r17c/sysroot/usr/include/i686-linux-android"
  • 查看手机的系统是64位还是32位的
    先把 /system/bin/cat文件复制到sdcard: cp /system/bin/cat /sdcard/
    然后把cat文件导出来:adb pull /sdcard/cat cat
    再把文件导入linux系统,使用file cat查看系统版本
    我的手机是:cat: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked (uses shared libs), BuildID[md5/uuid]=3e0d617626f422d39f014459076727db, stripped
  • 如果有需求的话,mk编译器配置,把C打包成so库
    app下的build里面添加配置
    1.defaultConfig中添加
 //闭包 指导编译方式的编译区域(armeabi-v7a , x86)
        externalNativeBuild {
            ndkBuild {
                abiFilters "armeabi-v7a"
                //这个可以不要,现在几乎没有x86的手机了。
                abiFilters "x86"
            }
           /* cmake {

            }*/
        }
 //指定打包的CPU架构模式
        ndk{
            abiFilters "armeabi-v7a"
            abiFilters "x86"
        }

2 android里面添加

  //指定脚本路径 ,自己添加Android.mk文件
    externalNativeBuild {
            ndkBuild {
                path 'src/Android.mk'
            }
    }
  • linux中普通编译静态库,add是自己写的C文件 main.c文件是自己写的C入口。
    1. 先变成二进制文件: gcc -c add.c -o add.o
    2. 打包成静态库 ar rcs -o libadd.a *.o
    3 . 编译静态库 gcc main.c -o -L . -ladd
    4. 运行main ./main
  • 交叉编译打包静态库
    1. 配置ar 变量 export NDK_AR_x86="/root/xiachenhui/android-ndk-r17c/toolchains/x86-4.9/prebuilt/linux-x86_64/bin/i686-linux-android-ar
    2. 交叉编译生成add.o文件 $NDK_GCC_x86 $NDK_CFIG_x86 -fPIC -c add.c -o add.o
    3 .打包成静态库: $NDK_AR_x86 rcs -o libadd.a add.o
    4. 这个导出来的.a才能在androidstudio使用
    配置的变量
export NDK="/root/xiachenhui/android-ndk-r17c"
# 交叉编译
export NDK_GCC_x86="/root/xiachenhui/android-ndk-r17c/toolchains/x86-4.9/prebuilt/linux-x86_64/bin/i686-linux-android-gcc"
export NDK_GCC_x64="/root/xiachenhui/android-ndk-r17c/toolchains/x86_64-4.9/prebuilt/linux-x86_64/bin/x86_64-linux-android-gcc"
export NDK_GCC_arm="/root/xiachenhui/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc"
export NDK_GCC_arm_64="/root/xiachenhui/android-ndk-r17c/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-gcc"


export NDK_CFIG_x86="--sysroot=/root/xiachenhui/android-ndk-r17c/platforms/android-23/arch-x86 -isystem /root/xiachenhui/android-ndk-r17c/sysroot/usr/include -isystem /root/xiachenhui/android-ndk-r17c/sysroot/usr/include/i686-linux-android"
export NDK_CFIG_x64="--sysroot=/root/xiachenhui/android-ndk-r17c/platforms/android-23/arch-x86_64 -isystem /root/xiachenhui/android-ndk-r17c/sysroot/usr/include -isystem /root/xiachenhui/android-ndk-r17c/sysroot/usr/include/x86_64-linux-android"
export NDK_CFIG_arm="--sysroot=/root/xiachenhui/android-ndk-r17c/platforms/android-23/arch-arm -isystem /root/xiachenhui/android-ndk-r17c/sysroot/usr/include -isystem /root/xiachenhui/android-ndk-r17c/sysroot/usr/include/arm-linux-androideabi"
export NDK_CFIG_arm_64="--sysroot=/root/xiachenhui/android-ndk-r17c/platforms/android-23/arch-arm64 -isystem /root/xiachenhui/android-ndk-r17c/sysroot/usr/include -isystem /root/xiachenhui/android-ndk-r17c/sysroot/usr/include/aarch64-linux-android"


export NDK_AR_x86="/root/xiachenhui/android-ndk-r17c/toolchains/x86-4.9/prebuilt/linux-x86_64/bin/i686-linux-android-ar"
export NDK_AR_x64="/root/xiachenhui/android-ndk-r17c/toolchains/x86_64-4.9/prebuilt/linux-x86_64/bin/x86_64-linux-android-ar"
export NDK_AR_arm="/root/xiachenhui/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ar"
export NDK_AR_arm_64="root/xiachenhui/android-ndk-r17c/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-ar"

- 交叉编译动态库
`
$NDK_GCC_x86 $NDK_CFIG_x86 -fPIC -shared add.c -o libadd.so
`



相关文章

网友评论

      本文标题:LINUX 命令以及交叉编译

      本文链接:https://www.haomeiwen.com/subject/slpezhtx.html