0、编译过程:
1、预处理:生成.i文件 - g++ -E test.cpp -o test.i
复制代码
2、编译:生成.s文件,即汇编文件
3、汇编:将汇编文件生成机器语言的二进制目标文件,即.o文件
4、链接:生成bin文件,即可执行文件
0、如何编译多目录下的文件? - g++ main.cpp src/swap.cpp -Iinclude -o main
- g++ main.cpp [2.cpp的路径] -I[需要的头文件的路径] -o [可执行文件名]
复制代码
1、如何由源文件.cpp生成静态库文件.a文件?
(1)汇编,生成xx.o文件: - g++ xx.cpp -c -I[xx.cpp里包含的头文件的路径]
复制代码
(2)生成静态库文件,libxx.a:
注意,静态库文件必须以lib开头 - ar rs libxx.a [汇编文件名xx.o]
复制代码
(3)使用静态库文件:链接,与其他.cpp文件链接,如在这里与main.cpp链接,生成可执行文件: - g++ main.cpp -I[头文件路径] -L[库文件路径] -l[库文件名,可以指定多个库文件] -o [最终可执行文件名]
复制代码
2、linux 下 g++编译程序时,-I(大写i) 与-L(大写l)-l(小写l) 的作用?
(1) -I (大写i)
编译程序按照-I指定的路进去搜索头文件。
-I/home/include/表示将-I/home/include/目录作为第一个寻找头文件的目录,寻找的顺序是:
/home/include/ -->/usr/include-->/usr/local/include
(2)-L(大写l)
表示:编译程序按照-L指定的路进去寻找库文件,一般的在-L的后面可以一次用-l指定多个库文件。
-L/lib/表示到/lib/目录下找库文件
(3)-l(小写l)
表示:编译程序到系统默认路进搜索,如果找不到,到当前目录,如果当前目录找不到,则到LD_LIBRARY_PATH等环境变量置顶的路进去查找,如果还找不到,那么编译程序提示找不到库。
本例子使用的是gunzip库,库文件名是libz.so,库名是z。很容易看出,把库文件名的头lib和尾.so去掉就是库名了。
3、如何由源文件.cpp生成动态库文件.so文件?
(1)生成动态库libxx.so: - g++ xx.cpp -I[包含的头文件路径] -fPIC -shared -o libxx.so
复制代码
(2)链接: - g++ main.cpp -I[头文件路径] -L[库文件路径] -l[库文件名,可以指定多个库文件] -o [最终可执行文件名]
复制代码
(3)执行:
这里与执行静态库文件不同的是,执行时需要指定生成的动态库所在的路径。 - LD_LIBRARY_PATH=[动态库所在的路径src] ./可执行文件名
复制代码
注意:动态库文件和静态库文件都是可执行文件。
g++命令注意点:
g++跟的指令是有顺序的,g++后面跟的都是生成的目标文件: - g++ -o helloworld helloworld.cpp
- g++ helloworld.cpp -o helloworld
- g++ -c helloworld.cpp -o helloworld.o
复制代码
|