[Linux服务器] Linux下G++编译

1087 0
Honkers 2025-3-8 13:03:10 | 显示全部楼层 |阅读模式

0、编译过程:

1、预处理:生成.i文件

  1. g++ -E test.cpp -o test.i
复制代码

2、编译:生成.s文件,即汇编文件

  1. g++ -S test.i -o test.s
复制代码

3、汇编:将汇编文件生成机器语言的二进制目标文件,即.o文件

  1. g++ -c test.s -o test.o
复制代码

4、链接:生成bin文件,即可执行文件

  1. g++ test.o -o test
复制代码

0、如何编译多目录下的文件?

  1. g++ main.cpp src/swap.cpp -Iinclude -o main
  2. g++ main.cpp [2.cpp的路径] -I[需要的头文件的路径] -o [可执行文件名]
复制代码

1、如何由源文件.cpp生成静态库文件.a文件?

(1)汇编,生成xx.o文件:

  1. g++ xx.cpp -c -I[xx.cpp里包含的头文件的路径]
复制代码

(2)生成静态库文件,libxx.a:

注意,静态库文件必须以lib开头

  1. ar rs libxx.a [汇编文件名xx.o]
复制代码

(3)使用静态库文件:链接,与其他.cpp文件链接,如在这里与main.cpp链接,生成可执行文件:

  1. 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:

  1. g++ xx.cpp -I[包含的头文件路径] -fPIC -shared -o libxx.so
复制代码

(2)链接:

  1. g++ main.cpp -I[头文件路径] -L[库文件路径] -l[库文件名,可以指定多个库文件] -o [最终可执行文件名]
复制代码

(3)执行:

 这里与执行静态库文件不同的是,执行时需要指定生成的动态库所在的路径。

  1. LD_LIBRARY_PATH=[动态库所在的路径src] ./可执行文件名
复制代码

注意:动态库文件和静态库文件都是可执行文件。

g++命令注意点:

g++跟的指令是有顺序的,g++后面跟的都是生成的目标文件

  1. g++ -o helloworld helloworld.cpp
  2. g++ helloworld.cpp -o helloworld
  3. g++ -c helloworld.cpp -o helloworld.o
复制代码
  1. -c:仅编译,不链接
复制代码

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2026 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行