一、 GNU开发环境基础
GCC和GDB
GCC(GNU C Compiler)是GNU项目中符合ANSI C保准的编译系统,能够编译用C ,C++ 。Objiect C等语言编写的程序。同时GCC也是一个交叉编译器,特别适用于不同平台的嵌入式开发
gcc程序编译过程
.c源代码——>.i预编译文件——>.s汇编文件——>.o目标文件——>可执行文件
预处理 编译 汇编 链接
gcc参数分类
常用参数
gcc -S
gcc -E
gcc -o
1.编译相关参数
-c 只编译不连接,生成目标文件.o
-S只编译不汇编,生产汇编代码
-E只进行预处理
-g包含调试信息
-o filename 指定目标输出文件
-I 搜索头文件路径
2.GCC编译动态链库然后调用
**静态链接库:**编译时把库文件完全包含在成可执行文件,会使文件臃肿 .lib+name.a
生成指令:
ar crv +{.a} +[.o}
调用静态链链接库: gcc -o【file】【file.c】-L+库地址 库名与前面的/中间一定要有空格
**动态链接库:**运行时调用而不是编译时调用,发布时要可执行文件加类库文件 lib+name.so【主版本号,此版本号,发行号】
1.生产于位置无关的目标代码 gcc -fPIC -c 【.c】
gcc -shared -o .so .o
编译库时的相关参数:
-static 静态编译(gcc默认是静态编译所以一般不加 )生成静态库
-shared 1、生成动态库文件2、进行动态编译
-L +文件夹 库文件搜索中添加路径
-fPIC 生成使用相对位置无关的目标代码,然后通常用于使用GCC的-static选项从该PIC目标文件生成动态库
第一种方法:把。so文件放到/usr/lib中去
第二种方法:改变环境变量