C/C++/Jni/NDK/Linux
C/C++/Jni/NDK基础
小 黄 鸡
QQ:2500503624
展开
-
Linux基础(六) 系统IO函数
使用file命令看文件格式文章目录1 打开文件2 创建文件3 文件权限的计算方式4 判断文件已经存在5 将文件截断为0root@iZ2ze9ftqv2b7zbety6qd8Z:~/learn_makeFile# file appapp: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, in...原创 2020-01-28 23:53:57 · 346 阅读 · 0 评论 -
Linux基础(五) makefile
makefile的规则规则的三要素文章目录1 一个简单的makefile示例2 根据.o来编译3 提取makefile中的变量4 makefile中的函数5 删除.o6 命令执行失败时继续向下执行本文主要介绍makefile的编写。1 一个简单的makefile示例创建一个makefile文件,并添加如下内容app:main.c add.c sub.c mul.c gcc main.c...原创 2020-01-28 23:53:32 · 166 阅读 · 0 评论 -
Linux基础(四) gcc
1 gcc的编译过程从sum.c到生成可执行程序的过程首先定义一个sum.c文件#include <stdio.h>#include "head.h"#define DEBUGint main(void){ int a = NUM1; int aa; int b = NUM2; int sum = a + ...原创 2020-01-26 23:34:20 · 633 阅读 · 0 评论 -
Linux基础(三) Vim
1 vim 命令模式vim是vi发展过来的工作模式:1 命令模式2 编辑模式3 末行模式H:前J:上K:下L:后0:行首$:行尾gg:文件开始位置文件末尾:G100G:跳转到100行1.1 删除x:删除光标后面的X:删除光标前面的u:撤销d0:删除光标前面的内容d$:删除光标后面的内容D:删除光标后面的内容dd:删除并复制当前行dw:删除单词d4:...原创 2020-01-26 23:33:40 · 156 阅读 · 0 评论 -
Linux基础(二) ftp nfs ssh scp
1 ftp1.1 ftp服务器搭建1 首先安装ftp服务器apt-get install vsftpd2 可以查看到有vsftpd的配置文件root@iZ2ze9ftqv2b7zbety6qd8Z:/etc# ls -l vsftpd.conf打开配置文件,并修改如下几项允许匿名登录anonymous_enable=YES实名用户拥有写权限(这一行是被注释的,打开注释)w...原创 2020-01-26 23:32:41 · 296 阅读 · 0 评论 -
Linux基础(一) Linux命令
a 日期yeliangdeMacBook-Pro:~ yeliang$ date2020年 1月21日 星期二 22时38分51秒 CSTb bash的含义b:伯恩 a:aganin sh:shellc shell命令被终端识别的命令4 命令解析器根据命令的名字,调用可执行的程序shell —> unix操作系统bash —> Linux操作系统1 Linux下...原创 2020-01-26 23:32:22 · 356 阅读 · 0 评论 -
Linux笔记 程序非正常退出报错 Segmenttation fault
以这个test2.c为例 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 void main(){ 5原创 2017-07-13 15:11:42 · 1167 阅读 · 0 评论 -
Linux笔记 程序调试gdb
1 调试准备 首先新建test1.c文件。 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <unistd.h> 4 5 int myfun(int a){原创 2017-07-13 13:55:22 · 367 阅读 · 0 评论 -
Linux笔记 pthread
1 创建一个线程 这段代码中的 pthread_create(&tid,NULL,thr_fun,"1");这一行将会创建一个线程,并且thr_fun方法将会在此线程中执行。“1”代表方法中的参数。2 编译目标程序 变异后,将会得到二进制的可执行程序 执行后 发现只打印了main thread 说明子线程乜有执行。这是因为主线程退出了,所有的子线程就终止了。所以没有打印。 主线程休眠一秒后原创 2017-07-12 18:00:11 · 391 阅读 · 0 评论 -
Linux笔记 shell脚本
关于快捷键:撤销操作 在命令模式下按u 删除按x1 注意空格不要随便加 创建局部的变量 不能加空格 下面的写法将会报错 下面这个也是空格的问题 执行后: 只有一个i就没有问题了 有空格就会有问题 2 字符串相关 加双引号“” 再次执行后 自动解析字符串拼接 执行后 输出$需要转义 把命令输出给变量进行赋值 波浪线下的反引号·· 反引号和括号原创 2017-07-10 17:00:41 · 433 阅读 · 0 评论 -
Linux笔记 命令行
清空命令行:reset文件操作:显示列表ls -l ls -la 所有ls -l ja* 通配符查找创建文件touch today.c复制文件cp src.txt dest.txtcp -i src.txt dest.txt 询问cp src.txt . 复制到当前目录cp -R 目录 dest 复制整个目录到指定路径cp c_?1 ../ 通配符复制到上级目录删除文件rm原创 2017-07-06 17:19:51 · 265 阅读 · 0 评论 -
JNI笔记 C访问Java构造方法,父类方法,中文乱码,C向Java中传入数组
1 访问构造方法 c代码JNIEXPORT jobject JNICALL Java_com_yeliang_JniTest_accessConstructor(JNIEnv *env, jobject jobj){ //1 根据全类名 找到jclass jclass cls = (*env)->FindClass(env,"java/util/Date"); //2 jmet原创 2017-06-13 17:29:39 · 470 阅读 · 0 评论 -
JNI笔记 C访问java属性方法
1 C访问Java非静态成员变量 c代码JNIEXPORT jstring JNICALL Java_com_yeliang_JniTest_accessField(JNIEnv *env, jobject jobj){ //在java中新建JniTest对象 JniTest jniTest = new JniTest(); //1 根据jobject获得jclass对象 jo原创 2017-06-12 16:12:10 · 444 阅读 · 0 评论 -
JNI笔记 Jclass Jobject JNI数据类型
1 Jclass Jobject java中的静态native方法public native static String getStringFromC();对应的静态native方法JNIEXPORT jstring JNICALL Java_com_yeliang_JniTest_getStringFromC(JNIEnv *env, jclass jcls){};java中的非静态nati原创 2017-06-12 11:09:55 · 1296 阅读 · 0 评论 -
JNI笔记 JNI开发流程
1 编写native方法public class JniTest { public native static String getStringFromC(); public static void main(String[] args) { }}2 javah命令,生成.h头文件1在src上右键然后选properties,然后选择拷贝2打开原创 2017-06-10 23:47:36 · 430 阅读 · 0 评论 -
NDK笔记 Linux下编译ffmpeg
1 购买阿里云服务器 阿里云购买地址 我买的是包年的 330。购买了以后,可以在控制台看到 2 通过Xshell连接到服务器 先要安装Xshell和Xftp。 然后打开Xshell,输入名称和主机的ip地址。ip地址即为上图中控制台的ip地址。我输入的是公用的。 然后点击确定 然后连接 输入用户名和密码 连接成功 3 在usr下创建文件夹点击Xshell中的这个按钮原创 2017-06-28 23:27:55 · 439 阅读 · 0 评论 -
NDK Cmake 爬坑
官网介绍 https://developer.android.com/studio/projects/add-native-code.html#link-gradle首先来说一下我今天遇到的问题 1 在自动生成的项目中,添加了一个native方法后,调用此方法报错说找不到。 2 新建cpp文件提示一堆错误。1在MainActivity中新建一个native方法并调用 按照官方介绍新建项目原创 2017-06-25 15:58:55 · 569 阅读 · 0 评论 -
NDK入门 第一个NDK项目
1 新建一个android项目 在新建的项目中新建类JniTest,并在类中编写native方法。 2 使用cmd命令生成.h文件 我的teminal不能用了 我擦,所以我用的cmd。 首先rebuild project一下。然后会看到build下生成的classes文件夹。 使用doc命令,首先切换到debug的目录下。cd D:\Development\StudioProject\Ap原创 2017-06-18 12:18:19 · 761 阅读 · 0 评论 -
JNI笔记 JNI引用,异常处理,初始化成员变量
1 回收局部引用变量 局部引用,通过DeleteLOcalREf手动释放对象c代码JNIEXPORT void JNICALL Java_com_yeliang_JniTest_localRef(JNIEnv *env, jobject jobj){ int i = 0; //模拟:循环创建对象 for (;i<5;i++){ jclass cls = (*原创 2017-06-14 16:43:27 · 831 阅读 · 0 评论 -
C笔记 C语言的执行流程 define指令
C语言的执行流程 1 编译 形成目标代码(.obj)void main(){ myprintf("疾风剑豪"); getchar();}因为没有myprintf();这个方法,所以会报错。 2 连接 将目标与C函数库连接合并,形成最终的可执行文件。可以看到上面的图片中,error LinK2091.无法解析的外部符号。说明已经生成了.obj文件,但是没有找到此方法。也就原创 2017-06-09 00:38:25 · 554 阅读 · 0 评论 -
C笔记 文件IO
1 读取文件void main(){ char *path = "E:\\Test\\love.txt"; //打开 FILE *fp = fopen(path,"r"); if (fp==NULL){ printf("文件打开失败"); return; } //读取 char buff[50]; //缓冲原创 2017-06-08 10:59:01 · 275 阅读 · 0 评论 -
C笔记 联合体 枚举
1 联合体union MyUnion{ int x; int y; double z;};void main(){ union MyUnion union1; union1.x = 90; union1.y = 100; union1.z = 23.8;//最后一次赋值才有效 printf("%d,%d,%lf\n",union1.x原创 2017-06-07 22:00:24 · 356 阅读 · 0 评论 -
C笔记 结构体
结构体是一种构造数据类型 把不同的数据类型整合起来 称为一个自定义的数据类型1 结构体初始化 定义结构体Manstruct Man{ char name[20]; int age;};void main(){ //初始化结构体的变量 只能在声明变量是赋值 struct Man man = { "赵信", 21 }; printf("%s,%d\n",m原创 2017-06-07 11:39:02 · 312 阅读 · 0 评论 -
C笔记 字符串
1 使用字符数组存储字符串void main(){ char str[] = { 'f', 'u', 'c', 'k' }; printf("%s\n", str); printf("%#x\n", str); getchar();}打印结果: 后面出现乱码是因为没有结束符char str[] = { 'f', 'u', 'c', 'k' ,'\0'};添加结束符原创 2017-06-04 16:48:59 · 283 阅读 · 0 评论 -
C笔记 动态分配 malloc,free,calloc,realloc
C语言中内存分配 1栈区 2堆区 手动分配释放,占操作系统80%内存。 3全局区或静态区 4字符常量区 5程序代码区静态内存分配 动态内存分配 静态分配内存: 分配内存的大小是固定的,很容易超出栈内存的最大值,为了避免内存不足会开辟更多的内存,容易浪费内存动态分配内存: 在程序运行过程中,动态指定需要使用的内存大小。类似java中的集合。 手动释放,释放之后这原创 2017-06-04 15:32:03 · 370 阅读 · 0 评论 -
C笔记 指针
1 变量p和*p的关系void main(){ int i = 59; int *p = &i; printf("%#x,%ld\n",p,*p); getchar();}打印结果为: p存储的是i的地址,*P是取地址的值 2 不同的指针类型不能赋值void main(){ int i = 59; //int类型的指针 int *p = &i;原创 2017-06-02 18:04:39 · 349 阅读 · 0 评论 -
C笔记 外挂原理
加深对指针的理解,通过注入dll动态库,来修改变量的值。1 时间逐渐减少void main(){ int time = 1000; printf("time:%#x\n", &time); while (time > 0){ time--; printf("游戏时间剩余%d\n", time); Sleep(1000);原创 2017-06-02 13:24:42 · 586 阅读 · 0 评论 -
C笔记 Visual Studio新建C项目
1 选择新建项目 2 选择Visual C++ 空项目 填写项目名称 3 显示出解决方案管理器 4 选择源文件 添加 新建项 5 输入新建项的名称 添加后原创 2017-06-02 09:42:11 · 626 阅读 · 0 评论 -
Visual Studio 新建C项目
1 选择新建项目 2 选择Visual C++ 空项目 填写项目名称 3 显示出解决方案管理器 4 选择源文件 添加 新建项 5 输入新建项的名称 添加后原创 2017-06-01 14:38:56 · 627 阅读 · 0 评论 -
C笔记 数据类型 指针
1 头文件#include <stdio.h>头文件中只有函数的声明,编译时会找到函数的具体实现。2 主函数void main(){ printf("hello world\n"); // 打印 system("pause"); //等待输入}运行结果: 3 数据类型void main(){ int i = 1; printf("%d\n", i原创 2017-06-02 10:17:51 · 306 阅读 · 0 评论 -
C++基础(五) 多态
文章目录1 多态示例2 虚析构函数3 多态的原理3.1 虚函数表和vptr指针3.2 证明vptr指针的存在3.3 vptr指针的初始化时机3.4 父类指针和子类指针的步长4 纯虚函数和抽象类1 多态示例#include <iostream>using namespace std;class Hero{public: //1 多态的必要条件1:要有virtual修饰的虚函数 virtual int getAd() { cout <&l原创 2020-05-15 14:22:58 · 179 阅读 · 0 评论 -
C++基础(四) 继承和派生
文章目录1 类和类之间的关系2 继承的访问方式1 类和类之间的关系#include <iostream>using namespace std;class A{public: void funcA() { cout << "funcA()" << endl; }};// 1 包含关系 B has Aclass B{public: void funcB() { a.funcA原创 2020-05-14 13:48:54 · 275 阅读 · 0 评论 -
C++基础(三) 类和对象
1 类和对象#include <iostream>using namespace std;//定义一个类struct Hero{public: int sex; char name[64];};class AdHero{public: int sex; char name[64]; void printHero() { cout << "性别: " << sex <&l原创 2020-05-12 18:47:36 · 374 阅读 · 0 评论 -
C++基础(二) C++对C语言的拓展
文章目录1 引用1.1引用的基本概念1.2 引用作为函数参数2 内联函数3 默认参数和占位参数4 函数重载1 引用1.1引用的基本概念#include <stdio.h>#include "iostream"using namespace std;int main(){ int a = 10; int *p = &a; *p = 20;...原创 2020-05-09 14:11:45 · 676 阅读 · 0 评论 -
C++基础(一) C++对C语言的增强
文章目录1 Hello World2 命名空间 namespace2.1 命名空间的使用1 直接用std::cout 方式2 使用using namesapce std 方式3 使用std::cout2.2 自定义命名空间(1) 定义一个命名空间(2) 命名空间嵌套3 C++语言的增强(1) 实用性增强1 对于变量定义的位置可以随用随定义2 对全局变量的检测能力加强3 使用struct时 不需要再...原创 2020-04-09 21:01:55 · 313 阅读 · 0 评论 -
C++笔记 类型转换,IO,STL标准模板库
1 C++转换类型自动转换void main(){ int i = 0; double d = 3.4; i = d; //double自动转换为int类型 cout << i << endl; //打印结果 3 system("pause");}使用 static_castvoid main(){ int i = 8; double d =原创 2017-06-27 15:22:07 · 522 阅读 · 0 评论 -
C++笔记 模板类,异常处理
1 模板类template<class T> class A{public: A(T a){ this->a = a; }protected: T a;};普通类继承模板类class B :public A<int>{public: B(int a,int b):A<int>(a){ this->b = b; }pri原创 2017-06-26 15:56:21 · 557 阅读 · 0 评论 -
C++笔记 继承
1 继承 代码重用class Human{public: void say(){ cout << "打招呼" << endl; }};//男人class Man :public Human{};void main(){ Man m; m.say(); //1 父类类型的引用或指针 Human* h_p = &m; h_p-原创 2017-06-22 15:23:37 · 442 阅读 · 0 评论 -
C++笔记 友元函数,友元类,运算符重载
1 友元函数 在友元函数中可以访问私有属性class A{ friend void modify_i(A *p,int a);private: int i;public: A(int i){ this->i = i; } void myprint(){ cout << i << endl; }};//友元函数的实现,原创 2017-06-21 18:06:07 · 386 阅读 · 0 评论 -
C++笔记 构造函数属性初始化,new,delete,对象的大小
1 构造函数属性初始化class Teacher{private: char* name;public: Teacher(char* name){ this->name = name; } ~Teacher(){ cout << "Teacher析构函数" << endl; } char* getName(){原创 2017-06-21 16:38:43 · 558 阅读 · 0 评论