C++ 用GCC编译

示例

假设有一个名为的源文件main.cpp,用于编译和链接未优化的可执行文件的命令如下(未经优化的编译对于初始开发和调试很有用,尽管-Og正式建议在较新的GCC版本中使用)。

g++ -o app -Wallmain.cpp-O0

以产生用于在生产中使用的优化的可执行程序,的使用一个-O选项(见:-O1,-O2,-O3,-Os,-Ofast):

g++ -o app -Wall -O2 main.cpp

如果省略-O选项,则默认不使用-O0(这意味着没有优化)(指定-O不带数字的解析为-O1)。

或者,直接使用组中的优化标志O(或更多实验优化)。以下示例以-O2优化为基础进行构建,并从-O3优化级别添加一个标志:

g++ -o app -Wall -O2 -ftree-partial-pre main.cpp

要生成特定于平台的优化可执行文件(以在具有相同体系结构的机器上的生产中使用),请使用:

g++ -o app -Wall -O2 -march=native main.cpp

以上任何一种都会产生一个二进制文件,可以.\app.exe在Windows以及./appLinux,Mac OS等操作系统上运行。

该-o标志也可以跳过。在这种情况下,GCC将a.exe在Windows和a.out类Unix系统上创建默认输出可执行文件。要编译文件而不链接它,请使用以下-c选项:

g++ -ofile.o-Wall -c file.cpp

这将生成一个名为的目标文件file.o,以后可以将其与其他文件链接以生成二进制文件:

g++ -o appfile.ootherfile.o

有关优化选项的更多信息,请访问gcc.gnu.org。特别要注意的是-Og(优化时注重调试经验-建议用于标准的edit-compile-debug周期)和-Ofast(所有优化,包括不遵守严格标准的优化)。

该-Wall标志启用许多常见错误的警告,应始终使用。为了提高代码的质量也常常鼓励使用也-Wextra和其他的警告标志未自动启用-Wall和-Wextra。

如果代码需要特定的C ++标准,请通过包含-std=标志来指定要使用的标准。支持的值对应于ISO C ++标准每个版本的最终确定年份。如GCC 6.1.0,为有效的值std=的标志是c++98/ c++03,c++11,c++14,和c++17/ c++1z。用正斜杠分隔的值是等效的。

g++ -std=c++11 <file>

GCC包含一些特定于编译器的扩展,当与该-std=标志指定的标准冲突时,这些扩展将被禁用。要在启用所有扩展名的情况下进行编译,gnu++XX可以使用上面列出XX的c++值所使用的任何年份的值。

如果未指定,则使用默认标准。对于6.1.0之前的GCC版本,默认值为-std=gnu++03;在GCC 6.1.0及更高版本中,默认值为-std=gnu++14。

请注意,由于GCC中的错误,该-pthread标志必须在编译和链接时出现在GCC上,以支持C ++ 11引入的C ++标准线程功能,例如std::thread和std::wait_for。使用线程功能时省略它可能不会导致警告,但在某些平台上会导致无效的结果。

与库链接:

使用该-l选项来传递库名称:

g++main.cpp-lpcre2-8

#pcre2-8 is the PCRE2 library for 8bit code units (UTF-8)

如果该库不在标准库路径中,请使用以下-L选项添加路径:

g++main.cpp-L/my/custom/path/ -lmylib

多个库可以链接在一起:

g++main.cpp-lmylib1 -lmylib2 -lmylib3

如果一个库依赖于另一个库,则将依赖库放在独立库之前:

g++main.cpp-lchild-lib -lbase-lib

或让链接器通过--start-group和确定自身的顺序--end-group(注意:这会大大提高性能成本):

g++main.cpp-Wl,--start-group -lbase-lib -lchild-lib -Wl,--end-group

           

以上是 C++ 用GCC编译 的全部内容, 来源链接: utcz.com/z/315809.html

回到顶部