编译的参数说明
gcc/clang -g -O2 -o test test.c -I -L -l
参数说明
-g:输出文件中的调试信息
-O:对输出文件做指令优化
-o:输出文件
-I:指定头文件位置(有可能引用的文件与当前文件不在同个目录)
-L:指定库文件位置(所引用三方库文件位置,例如使用FFmpeg下面的某些库)
-l: 指定使用哪个库
通过编译生成静态库.a文件
通过自己编写的c文件可通过编译生成.o文件,例如 现在编写了一个函数实现的add函数
编译语句:
gcc -g -c test.c 该命令生成指定的 test.o文件 但是由于test.o不带main函数入口,所以不能直接通过 ./test.o执行
再通过命令生成 静态文件.a ,生成命令 :
libtool -static -o libmylib.a 会生成静态库 mylib.a (注: libmylib 前面的lib是必须写的,实际库的名称 是mylib)
完整例子
我们编写一个加法的函数add
编写访问该函数的头文件.h
然后编译addLib.c,通过编译我们可以得到addLib.o文件,再通过addLib.o生成静态库.a文件 ,步骤如下:
① 编译成.o文件 gcc/clang -g -c addLib.c
② 生成静态库文件.a libtool -static -o libmyaddlib.a addLib.o
通过以上两步,可用得到库 : libmyaddlib.a文件
再编写测试类 addTest.c
编译addTest.c文件:
gcc -g -o addTest addTest.c -I . -L . -lmyaddlib (注: 这里库的名称必须是之前生成库名称前面去掉lib之后的名称)
通过以上步骤,可以获取编译后的 addTest.o文件,继续执行文件:
./addTest
可用得到执行结果,也就是输出 30