LINUX 命令以及交叉编译
2020-06-01 本文已影响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
`