gcc,g++区别
(1)gcc与g++都可以编译c代码与c++代码。但是:后缀为.c的,gcc把它当做C程序,而g++当做是C++程序;后缀为.cpp的,两者都会认为是C++程序。
(2)编译阶段,g++会调用gcc,对于c++代码,两者是等价的,但是因为gcc命令不能自动和C++程序使用的库联接,所以通常用g++来完成链接。
(3)编译可以用gcc/g++,而链接可以用g++或者gcc -lstdc++。因为gcc命令不能自动和C++程序使用的库联接,所以通常使用g++来完成联接。但在编译阶段,g++会自动调用gcc,二者等价。
g++用法
g++常用参数
-o <filename>
:指定输出文件的名称。- -c :仅编译,不链接
- -std=<standard>:指定标准版本,例如 -std=c++11
- -g:生成调试信息
-I<directory>
:指定头文件搜索路径。-L<directory>
:指定库文件搜索路径。-l<library>
:指定链接的库文件,例如,-lm
表示链接数学库。
g++常用指令
编译单个文件
g++ hello.cpp -o hello
生成一个可执行文件 hello
(在Windows上会生成 hello.exe
)。如果没有使用 -o
选项,默认生成的可执行文件名为 a.out
(在Windows上为 a.exe
)。
编译多个文件
假设程序有main.cpp
和 helper.cpp
单步完成:
可以用一条命令同时编译和链接所有源文件:
g++ main.cpp helper.cpp -o my_program
生成一个名为 my_program
的可执行文件。
分步完成:
1.编译各个源文件
g++ -c main.cpp -o main.o
g++ -c helper.cpp -o helper.o
-c
选项表示仅编译,不进行链接。每个命令都会生成一个目标文件:main.o
和 helper.o
。
2.链接目标文件
g++ main.o helper.o -o my_program
//g++ main.cpp -o main -lopencv_core
- 库文件
opencv_core
位于默认搜索路径的情况下 - 库名应该是没有
lib
前缀和文件扩展名的形式,例如opencv_core
而不是libopencv_core.so
。 - 如果库文件不在默认搜索路径中,需要使用
-L
选项指定路径
链接外部库
g++ <源文件或目标文件> -o <输出文件名> -l<库名> [<其他选项>]
示例
编译一个包含两个源文件 main.cpp
和 helper.cpp
的项目,并启用所有警告和C++11标准:
g++ -wall -std=C++11 main.cpp help.cpp -o my_program