GCC编译器

发布时间 2023-09-05 22:49:26作者: charlie12345
(1)预处理(preprocessing)、编译(compilation)、汇编(assembly)和链接(linking)
	gcc -E -o hello.i hello.c			//预处理(preprocessing)
	gcc -S -o hello.s hello.i			//编译(compilation)
	gcc -c -o hello.o hello.s			//汇编(assembly)
	gcc -o hello hello.o				//链接(linking)

(2)编译器调试
	gcc -o hello hello.c -v				//查看编译的具体流程
	
(2)静态链接
	1)gcc -o hello hello.c -static  // 静态链接	

(3)库
	1)动态库:
		生成动态库:
			gcc -shared  -o libsub.so  sub.o  sub2.o  sub3.o		//可以使用多个.o生成动态库
			gcc -o test main.o  -lsub  -L /libsub.so/所在目录/
		使用动态库:
			libsub.so放到Ubuntu的/lib目录
			export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/a  		//声明动态库目录
	2)静态库:
		生成静态库:
			ar  crs  libsub.a  sub.o  sub2.o  sub3.o(可以使用多个.o生成静态库)
			gcc  -o  test  main.o  libsub.a  (如果.a不在当前目录下,需要指定它的绝对或相对路径)

		使用静态库:
			不需要把静态库libsub.a放到板子上

(4)其他用法:
	1)其他用法
		(1)警告选项:gcc -Wall -c main.c		//警告选项
		(2)调试选项:-g 
		(3)优化选项:-O或-O1(较少优化)、-O2(常用)、-O3(更多优化)、-O0(不优化)
		
	2)其他少用用法:
		gcc -E main.c   // 查看预处理结果,比如头文件是哪个
		gcc -E -dM main.c  > 1.txt  // 把所有的宏展开,存在1.txt里
		gcc -Wp,-MD,abc.dep -c -o main.o main.c  // 生成依赖文件abc.dep,后面Makefile会用
		echo 'main(){}'| gcc -E -v -  // 它会列出头文件目录、库目录(LIBRARY_PATH)

		gcc -v -nostartfiles -o test main.o sub.o	//不链接系统标准启动文件,而标准库文件仍然正常使用
		gcc -v -nostdlib -o test main.o sub.o	//不链接系统标准启动文件和标准库文件,只把指定的文件传递给链接器

		gcc -L. -o test main.o -lsub			//用-Ldir选项将当前目录加入搜索路径

注意:
	详细可参见 韦东山手册,较详细,有一定参考价值

参考:韦东山Linux教程