标签:是什么 允许 .so文件 def 转换 sign process and type
一、为类型命名别名 struct node{ int num; struct node *next; }; typedef struct node node_t; node_t n; 使用typedef为类型定义别名。 三个步骤: 1、定义一个类型的变量或常量 2、在第一步的基础上,在最前边加上typedef关键字,这时候,原来的变量或常量就是类型的别名(新类型)。 3、使用新类型定义变量或常量。 举例说明: 1、为int类型定义别名,count_t; typedef int count_t; count_t c; 2、在系统中经常会出现下边情况 uint32_t; typedef unsigned long uint32_t; typedef unsigned short uint16_t; 3、为指针类型定义别名 char *str_t; 变量 str_t 类型 * typedef char *str_t; str_t s,r;=====char *s,*r; 4、为一个结构体类型定义别名 struct node{ int num; struct node *next; }; typedef struct node node_t; typedef node_t *list_t; list_t h; list_t *n; 5、为函数类型定义别名 int (*fun_t)(int,int); fun_t 是变量 typedef int (*fun_t)(int,int); fun_t 是类型的别名 指针类型 访问方式是int(int,int); typedef int t_add(int,int); t_add 类型的别名 int (int,int); t_add *f; 以昨天代码为例,演示类型的别名 6、为数组类型命名别名 int arr_t[3]; arr_t是常量 int [3] 类型 typedef int arr_t[3]; arr_t是类型的别名 int [3] arr_t a; a是什么? a是一个一维数组。 arr_t b[2]; 验证数组的别名。代码参见 arr_alias.c 回调函数 二、环境变量 什么是环境变量? 操作系统为系统上运行的程序需要提供一个环境,在这个环境中有些资源的访问需要使用变量的形式提供,这就是环境变量。 bash交互窗口的环境变量。 程序和进程的区别? 程序是指令的集合。静态的。 进程是程序运行的实例。程序加载到内存运行起来,才是进程。 一个程序运行一次产生一个进程。每个进程都有自己的一个身份证号。这个编号专业术语称为PID。 环境变量是可以被子进程继承的变量。? 如何察看bash下的环境变量? env 环境变量的格式: name=value 切记等号的左右两边不允许出现空格 USER=tarena 如何访问环境变量的值? $USER echo $USER bash下有两种变量 自定义类型的变量 环境变量 自定义类型的变量不能被子进程继承? 而环境变量是可以被子进程继承的。? 如何为自定义变量赋初值? NAME=beijing 自定义变量也就是当前bash私有的变量。 将自定义变量转换为环境变量 export 变量的名字 PATH PS1 PS1 这个环境变量是提示符资源的环境变量。 通过设置PS1环境变量就可以改变bash的提示符 export PS1="\W\$" 《鸟哥私房菜》 在bash启动的时候,会首先执行一个脚本程序。这个脚本程序中可以配置bash的环境变量。 文件的名字是~/.bashrc 在文件的末尾增加一行,内容是: export PS1="\W\$" PATH: 察看PATH的内容: UC$echo $PATH /home/tarena/workdir/Android2.3/android-source/jdk1.6.0_16/bin:/bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin:/home/tarena/workdir/linux-x86/sdk/android-sdk_eng.root_linux-x86/tools 以冒号作为分隔符,有多条路径。 export PATH=$PATH:. 三、静态库文件的制作和使用 静态库文件的命名 lib库名.a 函数库分为两种。静态库和动态库 静态库的制作和使用步骤(tmath文件夹) 1、需要将添加到静态库的文件编译为目标文件 tmath$ls add.c mul.c process.c t_math.h tmath$gcc -c *.c tmath$ls add.c mul.c process.c t_math.h add.o mul.o process.o 2、将第一步生成的目标文件打包到静态库文件中 tmath$ar -r libpmath.a *.o ar: creating libpmath.a tmath$ls add.c libpmath.a mul.o process.o add.o mul.c process.c t_math.h 3、使用静态库文件链接源文件生成可执行文件 gcc point.o -Ltmath -lpmath -o p 补充: gcc的参数 -I路径 将路径添加到系统的指定的路径中。(搜索头文件的指定路径中) -L路径 这个路径是库文件所在的路径 -l库名 四、动态库的制作和使用 动态库文件的命名 lib库名.so 动态库的制作和使用步骤: 1、将需要加入到动态库的文件编译成目标文件。(与位置无关的目标文件) tmath$gcc -c -fPIC *.c tmath$ls add.c mul.c process.c t_math.h add.o mul.o process.o 2、将生成的目标文件打包到动态库文件中 tmath$gcc -shared -o libpmath.so *.o tmath$ls add.c libpmath.so mul.o process.o add.o mul.c process.c t_math.h 3、将源程序链接动态库文件,生成可执行文件。 day03$gcc point.c -Ltmath -lpmath -Itmath day03$a.out a.out: error while loading shared libraries: libpmath.so: cannot open shared object file: No such file or directory 链接的时候 加载的时候 连接器 加载器 问题的原因是加载器找不到libpmath.so文件 a.out 程序依赖于动态库libpmath.so 如何察看你的可执行文件依赖哪些动态库? ldd 可执行文件的名字 需要加载器找到这个库文件。 1、使用环境变量告诉加载器动态库的搜索路径 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:tmath 2、加载器和链接器都有默认路径。/lib或者/usr/lib 动态库和静态库的区别 使用静态库生成的可执行文件,静态链接的。可执行文件不再依赖于静态库。 使用动态库生成的可执行文件,动态链接的。可执行文件依赖于动态库。 动态链接是发生在程序加载到内存中的时候发生链接。 动态库也称为共享库。 可执行文件和动态库文件有效的隔离。 总结: 一、为类型定义别名 二、环境变量 三、静态库的制作和使用 四、动态库的制作和使用
标签:是什么 允许 .so文件 def 转换 sign process and type
原文地址:http://www.cnblogs.com/Kernel001/p/7732531.html