当前位置: 首页 > ops >正文

NDK学习之路-Linux基础篇

前言

一、基本命令集

 下面是 文件权限

 vim/vi编辑

Linux 权限:

防火墙:

二、编译的原理

 三、拉流

四、编译器配置(交叉编译重要参数)

总结



前言

Android底层是Linux学习Linux相关命令及操作是必须的

一、基本命令集

  1. 下载:  wget 下载链接
    wget https://dl.google.com/android/repository/android-ndk-r17c-linux-x86_64.zip?hl=zh_cn
     

    解压:unzip android-ndk-r17c.zip

  2.  下面是 文件权限
     

    -rw-r--r-- 1 root root      31 Jan  3 20:58 test.txt

    - 文件
    d 代表文件夹 目录


    rw- 1.当前自身所在用户的权限
    r-- 2.代表同组的权限
    r-- 3.其他用户的权限

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


    chmod 777 test.txt 最高权限的配置
    -rwxrwxrwx 1 root root      31 Jan  3 20:58 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 给三组都分配了读的权限
     

  3.  vim/vi编辑
     

    一进入VIM编辑器的是,默认是命令模式
    i 编辑的意思
    a 追加的意思
    :w 就是保存的意思
    :q 退出的意思
    :q! 强制退出,不管有没有保存
    set number 显示行号
    / 搜索

    注意点:1.不小心按到 Ctrl + S / Ctrl + 其他  会出现 死机的现象
        2.不要操作小键盘

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

  4.  基本命令参解
     

        * TODO Linux命令使用* mkdir 目录名称(创建一个文件夹)** Linux的环境变量:*  临时环境变量:连接到Linux服务器,会产生一个回话,那么我们配置的临时环境变量就保存在这个回合中,如果关闭了,临时环境就没有了*  export:代表声明一个环境变量,声明的过程中,内容是以:隔开的,Windows是以;隔开的*  声明:export CLASSPATH=KevinStudy:NDK:XShell*  查看:echo $CLASSPATH*  查看电脑环境变量:echo $PATH   (类似于 Windows中的 path 一样哦)**  永久环境变量:*  export PATH=${PATH}:xxxxx (代表是 在PATH这个环境变量的基础上 增加: xxxxx环境变量的配置)*  三个重要的文件:profile,bashrc,bash_profile*  cat /etc/profile (代表是 输出 profile文件的内容)*  ~ 代表当前用户,相当于Windows下的C:\Users\Administrator*  etc:代表的是全局环境变量的设定, ~/是用户私有环境变量的设定*  刷新修改的 环境变量文件 命令是:source /etc/profile**  vim(:q!代表不保存,退出到命令行, :wq代表保存,退出到命令行)*
  5. Linux 权限:
     

     * TODO Linux 权限** 查看当前用户命令:whoami* 查看当前分组命令:groups** -代表文件* d代码目录 dir 的意思** 第一组(3个):代表是当前所在用户的权限,也就是自己本身的权限* 第二组(3个):代表同组的权限* 第三组(3个):代表其他用户的权限** 查看共有那些用户:cat /etc/passwd** vim test.txt   编写内容  按esc键,再输入:wq* 查看此文件所属的组:groups test.txt** 发现此文件是所属 root用户 root组 ,然后可以修改用户/组的权限,命令是:chown ntp:ntp test.txt** 修改test.txt的权限:* 1.切换用户,su ntp* 2.还原当前用户,su* 3.修改权限:chmod 177 test.txt,不可读不可写了** 修改权限细节:例如:给此文件分配最高权限 可读 可写 可执行 并且是三组都是这样 chmod 777 test.txt*  1.使用数字修改权限:(r 可读 4),(w 可写 2),(x 可执行 1)*   chmod 477 test.txt: 第一组 可读/不可写/不可执行, 后面两组:可读/可写/可执行*   可以任意组合数字,来完成权限*  2.使用标识修改权限:(+x 可执行)(+r 可读)(+w 可写)*   chmod +x test.txt , chmod +r test.txt  chmod +w test.txt 修改的是当前用户这一组*   chmod u=r,g=wr,o=r test.txt 同时给三组 添加权限 user,group,other*   修改文件夹里面所有的文件权限:chmod -R 777  Test01/*

  6. 防火墙:

         * TODO 防火墙:防火墙是为了保护我们的计算机的,是为了提高安全性* 安装iptables防火墙:yum/apt install iptables* 查看配置:iptables -nL*  Chain INPUT (policy ACCEPT) 输入 允许的, 如果是DROP 就是不允许的*  target     prot opt source               destination**  Chain FORWARD (policy ACCEPT) 转发 允许的*  target     prot opt source               destination**  Chain OUTPUT (policy ACCEPT) 输出 允许的*  target     prot opt source               destination


二、编译的原理

编译(把人写的代码变成机器可以认识的指令) Linux(gcc),Mac(Clang)
1.预处理阶段(include,宏 ....)
    gcc -E A.c -o A.i

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

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

4.链接阶段,打出可以执行的
    gcc -C A.o -o A
    ./A   执行

一条命令之前上面四个步骤: gcc B.c -o B

 三、拉流

http://ffmpeg.org/download.html

D:\NDK\Utils\ffmpeg-20191226-b0d0d7e-win64-static\ffmpeg-20191226-b0d0d7e-win64-static\bin
配置到环节变量:path


rtmp流地址:
https://blog.csdn.net/XiaoYuWen1242466468/article/details/90287886

四、编译器配置(交叉编译重要参数)

vim /etc/profile 

#这是操作的目录
export my_dir="/root/Zer0"
export NDK="$my_dir/android-ndk-r17c"

  • NDK_GCC  编译器

export NDK_GCC_x86="$NDK/toolchains/x86-4.9/prebuilt/linux-x86_64/bin/i686-linux-android-gcc"
export NDK_GCC_x64="$NDK/toolchains/x86_64-4.9/prebuilt/linux-x86_64/bin/x86_64-linux-android-gcc"
export NDK_GCC_arm="$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc"
export NDK_GCC_arm_64="$NDK/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-gcc"

  • NDK_CFIG 链接
export NDK_CFIG_x86="--sysroot=$NDK/platforms/android-21/arch-x86 -isystem $NDK/sysroot/usr/include -isystem $NDK/sysroot/usr/include/i686-linux-android"
export NDK_CFIG_x64="--sysroot=$NDK/platforms/android-21/arch-x86_64 -isystem $NDK/sysroot/usr/include -isystem $NDK/sysroot/usr/include/x86_64-linux-android"
export NDK_CFIG_arm="--sysroot=$NDK/platforms/android-21/arch-arm -isystem $NDK/sysroot/usr/include -isystem $NDK/sysroot/usr/include/arm-linux-androideabi"
export NDK_CFIG_arm_64="--sysroot=$NDK/platforms/android-21/arch-arm64 -isystem $NDK/sysroot/usr/include -isystem $NDK/sysroot/usr/include/aarch64-linux-android"
  • NDK_AR 编译静态库
export NDK_AR_x86="$NDK/toolchains/x86-4.9/prebuilt/linux-x86_64/bin/i686-linux-android-ar"
export NDK_AR_x64="$NDK/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-ar"
export NDK_AR_arm="$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ar"
export NDK_AR_arm_64="$NDK/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-ar"

举个例子:arm手机(32位)编译成功的配置

  • export NDK_gcc="/root/Zer0/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc"

//--sysroot=路径(自动寻找头文件和库文件 .a /.so )
       // -isystem 路径 (自动寻找指定的头文件)
       //如果同时设置  --sysroot=路径  -isystem 路径,最终达到的效果是(使用了前者的库文件,使用了后者的头文件)

  • export NDK_CFIG ="--sysroot=/root/Zer0/android-ndk-r17c/platforms/android-21/arch-arm -isystem /root/Zer0/android-ndk-r17c/sysroot/usr/include"

以上配置还有一点小问题,asm无法引入,会报错,报错原因:C源码内部需要引入asm。需追加-isystem /root/Zer0/android-         ndk-r17c/sysroot/usr/include/arm-linux-androideabi。如下:

  • export NDK_CFIG ="--sysroot=/root/Zer0/android-ndk-r17c/platforms/android-21/arch-arm -isystem /root/Zer0/android-ndk-r17c/sysroot/usr/include -isystem /root/Zer0/android-ndk-r17c/sysroot/usr/include/arm-linux-androideabi"

//不加 -pie在Android平台执行报错 提示【PIE】错误

  • $NDK_gcc $NDK_CFIG -pie main.c -o main_ndk_exe
     


打包静态库:

NDK_AR rcs -o libadd.a add.o


总结

http://www.xdnf.cn/news/11301.html

相关文章:

  • C语言为内存分配空间(代码段、数据段、bss段、存储类、变量的生命周期)_c语言全局字符串在代码段吗
  • 软件测试报告示例模板
  • 邓白氏编码的申请流程
  • TSN(时间敏感网络)纯干货分享
  • nrm 安装介绍
  • 辗转相除法
  • 前端插件clipboard 操作剪切板
  • Python入门教程(保姆级),从零基础入门到精通
  • gson快速入门和使用详解
  • cordova 一个将web应用程序封装成app的框架
  • C++ lambda表达式用法说明
  • Oracle中decode函数详解
  • 麦克斯韦方程组(彩图完美解释版)
  • 设计模式之单例、工厂、观察者模式
  • 张国荣一生57部电影海报全集
  • Kali-登录暴力破解器工具-medusa使用
  • 【硬件工程师】一次性讲透RS485接口
  • 数字版权管理 DRM 简介
  • 什么是RIA技术,RIA技术概览
  • 常用计算机外部设备有哪些,常用的计算机外设有哪些?
  • [转载]希捷固件门7200.12 CC46固件升级方法
  • Verilog任意分频器设计
  • 史蒂夫·乔布斯 - 简介
  • 个人博客搭建流程(域名、主机、解析、源码、搭建)全程详解
  • Template、ItemsPanel、ItemContainerStyle、ItemTemplate区别和联系
  • JSP基于Java的网咖计费管理系统91y3v程序+源码+数据库+调试部署+开发环境
  • 修改服务器网卡设置,网络适配器怎么设置网络好 完美的三种网络适配器设置方法...
  • linux虚拟机 Ubuntu 安装方法
  • iOS 7新功能汇总!
  • 《你不可不知的人性》刘墉 读书笔记(五)