gcc 编译笔记
程序员文章站
2022-07-14 20:51:39
...
1)gcc的一些参数
1.1)-o 指定输出
gcc 生成二进制文件
1)gcc xxx.c -o xxx
2)gcc xxx.o xxx.o -o xxx
1.2)-E 预编译.i
gcc xxx.c -E
1.3)-S 生成汇编程序
gcc xxx.i -S
1.4)-c 生成目标文件.o
gcc xxx.s -c
1.5)-O1 -O2 -O3 编译优化选项
1.6)-Wall 输出编辑警告
1.7)-I 指定头文件文件夹目录
如果.h文件和.c文件在同一目录下,则不用特别指定,否则需要特别指定
1.8)-L 指定静态库文件夹目录
1.9)-l 指定静态库文件名
1.10)-g gdb调试必须用
1.11)nm 查看
列出.o .a .so中的符号信息,包括诸如符号的值,符号类型及符号名称等。所谓符号,通常指定义出的函数,全局变量等等。
1.12)-fpic:产生位置无关代码
1.13)-shared:生成共享库
2)linux静态库
2.1)制作静态库
2.1.1)生成.o文件
gcc *.c -c xxx.o
2.1.2) ar 打包.o成静态库
ar -crs libxxx.a *.o
-c create的意思
-r replace的意思,表示当插入的模块名已经在库中存在,则替换同名的模块。如果若干模块中
有一个模块在库中不存在,ar显示一个错误消息,并不替换其他同名模块。默认的情况下,新的成
员增加在库的结尾处,可以使用其他任选项来改变增加的位置。
2.2)使用静态库
gcc xxx.c -o xxx -L静态库目录 -l静态库名字 -I头文件目录
3)linux动态库
3.1)制作动态库
gcc -shared -fpic *.c -o libxxx.so
3.2)使用动态库
3.2.1)最直接最简单的方法就是把libxxx.so拉到
/usr/lib 或/lib中去
gcc main.c -o main -lxxx(动态库名)
3.2.2.1)LD_LIBRARY_PATH变量 临时
还有一种方法,假设libaddsub.so在/home/linux/addsub
export LD_LIBRARY_PATH=/home/linux/addsub:$LD_LIBRARY_PATH
3.2.2.2)设置启动时加载LD_LIBRARY_PATH变量
在.profile文件或者 .bashrc文件中
加入export LD_LIBRARY_PATH=/home/linux/…(设定的目录)
3.2.4)/etc/ld.so.conf文件
另外还可以在/etc/ld.so.conf文件里加入我们生成的库的目录,然后/sbin/ldconfig,命令如下:
①sudo vim /etc/ld.so.conf
②/sbin/ldconfig
说明:
/etc/ld.so.conf是非常重要的一个目录,里面存放的是链接器和加载器搜索共享库时要检查的目录,
默认是从/usr/lib /lib中读取的,所以想要顺利运行,我们也可以把我们库的目录加入到这个文件中
并执行
/sbin/ldconfig。