hello.c ->(预处理 gcc -E ->hello.i) ->(编译器 gcc -S ->hello.s)/汇编文件 ->(gcc -c->hello.o)/二进制文件 ->(gcc->a.out)/可执行文件
头文件展开,注释去掉
gcc -E hello.c hello.i
C文件变为汇编文件
gcc -S hello.i -o hello.s
汇编文件变为二进制文件
gcc -c hello.s -o hello.o
将函数库钟相应的代码组合到目标文件中
gcc hello.o -o hello
方便记忆:ESC
-O对生成的文件进行指定
-I 指定头文件的位置
-D 指定宏,不需要在程序里特意指定
-O 指定优化程序
-Wall warming信息
-g 增加调试信息
-L 指定lib的目录
-l 指定库的名称,掐头去尾,比如libMyapp.a 则只写Myqpp即可
-shared 生成动态库,命名规则 lib开头
静态库的制作
head.h文件
#include <stdio.h>
int sum(int a,int b);
main.c文件
#include “head.h”
int sum(int a,int b)
{
return a+b;
}
先生成.o文件
gcc -c *.c
ar rcs libMyapp.a *.o 这样就可以打包成.o文件
gcc main.c -I …/include -L …/lib -l Myapp -o app
生成动态库
gcc -shared -o libMyCalc.so *.o -I include
使用的时候
第一种方式:gcc main.c ../lib/libMyapp.so -o app -I include
第二种方式:gcc main.c ../include -L ../lib -lMyapp -o myapp
执行./myapp时,出错 error while loading shared libraries
ldd可以查看程序运行时所依赖的所有动态库共享库
解决方式:
1.LD_LIBRARY_PATH是系统默认的搜索动态库的路径,直接赋值环境变量
export LD_LIBRARY_PATH=./lib
只是临时方式,把终端关闭之后就不行了
2.cd到home 修改.bashrc文件,增加
export LD_LIBRARY_PATH=./lib
3.需要找到动态库的配置文件,动态库的路径写到配置文件中
cd 到etc目录中修改ld.so.conf
更新 一下 sudo ldconfig -v