欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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。

4)gdb