g++的基本使用

g++是GNU组织推出的C++编译器。它不但可以用来编译传统的C++程序,也可以用来编译现代C++,比如C++11/14等。

g++的用法和gcc类似,编译C++的时候比gcc更简单,因为它会自动链接到C++标准库,而不像gcc需要手工指定。

g++编译程序的内部过程和gcc一样,也要经过4个阶段:预处理、编译、汇编和链接。

g++的基本语法格式如下:

g++ [选项] 准备编译的文件 [选项] [目标文件]
编译单个源文件
g++ test.cpp -o test

test.cpp为需要编译的源文件,test为输出的可执行目录

编译多个源文件
 g++ testspeaker.cpp speaker.cpp -o testspeaker

testspeaker.cpp speaker.cpp 需要编译的2个源文件

更多参数详解

-E
只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面.

g++ -E test.cpp > test.txt

-S
只激活预处理和编译,就是指把文件编译成为汇编代码。

g++ -S test.cpp

他将生成.s的汇编代码,你可以用文本编辑器察看

-c
只激活预处理,编译,和汇编,也就是他只把程序做成obj文件

gcc -c hello.c

他将生成.o的obj文件

目录选项

-Wl:rpath,添加运行时库路径
-Wl:rpath, 后面也是路径,运行的时候用。这条编译指令会在编译时记录到target文件中,所以编译之后的target文件在执行时会按这里给出的路径去找库文件。

如:-Wl:rpath=/home/hello/lib

表示将/home/hello/lib目录作为程序运行时第一个寻找库文件的目录,程序寻找顺序是:/home/hello/lib–>/usr/lib–>/usr/local/lib。

可以加多个包含路径,程序在运行时的寻找顺序为添加的顺序。

-L,添加链接库路径
-L 后跟路径,告诉链接器从哪找库(.so文件),只有在链接时会用到。

如:-L /home/hello/lib

表示将/home/hello/lib目录作为第一个寻找库文件的目录,寻找顺序是:/home/hello/lib–>/usr/lib–>/usr/local/lib。

可以加多个包含路径,链接器的寻找顺序为添加的顺序。

-l,添加引用链接库
-l 在链接时用到,它的作用是告诉链接器,要用到哪个库。 如:-l pthread

告诉链接器(linker),程序需要链接pthread这个库,这里的pthread是库名不是文件名,具体来说文件句是libpthread.so

-I,添加包含路径
-I 在编译时用,告诉编译器去哪个路径下找文件

如:-I /home/hello/include

表示将/home/hello/include目录作为第一个寻找头文件的目录。

编译器的寻找顺序是:/home/hello/include–>/usr/include–>/usr/local/include。如果在/home/hello/include中有个文件hello.h,则在程序中用#include就能引用到这个文件。

可以加多个包含路径,编译器的寻找顺序为添加的顺序。

调试选项

-g
只是编译器,在编译的时候,产生调试信息。

-gstabs
此选项以stabs格式声称调试信息,但是不包括gdb调试信息.

-gstabs+
此选项以stabs格式声称调试信息,并且包含仅供gdb使用的额外调试信息.

-ggdb
此选项将尽可能的生成gdb的可以使用的调试信息.

-glevel
请求生成调试信息,同时用level指出需要多少信息,默认的level值是2

链接选项

-static 此选项将禁止使用动态库。
优点:程序运行不依赖于其他库

缺点:文件比较大

-shared 指定生成动态链接库
优点:生成文件比较小

缺点:运行时需要系统提供动态库

-symbolic 建立共享目标文件的时候,把引用绑定到全局符号上.
对所有无法解析的引用作出警告(除非用连接编辑选项 `-Xlinker -z -Xlinker defs’取代)。

注:只有部分系统支持该选项.

错误与警告

-Wall
一般使用该选项,允许发出GCC能够提供的所有有用的警告。也可以用-W{warning}来标记指定的警告。

-pedantic
允许发出ANSI/ISO C标准所列出的所有警告

-pedantic-errors
允许发出ANSI/ISO C标准所列出的错误

-werror
把所有警告转换为错误,以在警告发生时中止编译过程

-w
关闭所有警告,建议不要使用此项

预处理选项

-Dmacro
相当于C语言中的#define macro

-Dmacro=defn
相当于C语言中的#define macro=defn

-Umacro
相当于C语言中的#undef macro

-undef
取消对任何非标准宏的定义

其他选项

-o
制定目标名称,缺省的时候,g++编译出来的文件是a.out

-O
-O0
-O1
-O2
-O3
编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高

-fpic
编译器就生成位置无关目标码.适用于共享库(shared library).

-fPIC
编译器就输出位置无关目标码.适用于动态连接(dynamic linking),即使分支需要大范围转移.

-v
显示详细的编译、汇编、连接命令

  • 8
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,我之前的回答有误。在Windows平台上,Visual Studio自带的编译器不支持编译使用G++语法的代码。如果您想使用G++编译器来访问SQLite,您可以使用MinGW或Cygwin来提供G++编译器环境。 以下是在MinGW环境下访问SQLite的基本步骤: 1. 下载并安装MinGW。您可以从MinGW官网(https://sourceforge.net/projects/mingw/)下载MinGW安装程序,并按照安装向导的指示进行操作。在安装时,选中“mingw32-gcc-g++”以及“mingw32-make”选项。 2. 下载SQLite的预编译二进制文件,并解压到您的计算机上。 3. 在您的项目中包含SQLite的头文件。例如,如果您将SQLite解压到C:\sqlite下,您可以在您的代码中包含以下头文件: ```c++ #include "C:/sqlite/sqlite3.h" ``` 4. 在您的代码中使用SQLite API来访问SQLite数据库。以下是一个简单的示例代码: ```c++ #include <iostream> #include "C:/sqlite/sqlite3.h" int main() { sqlite3* db; int rc = sqlite3_open("test.db", &db); if (rc) { std::cerr << "Error opening SQLite database: " << sqlite3_errmsg(db) << std::endl; sqlite3_close(db); return 1; } std::cout << "Opened SQLite database successfully!" << std::endl; sqlite3_close(db); return 0; } ``` 在这个例子中,我们打开了一个名为test.db的SQLite数据库,并在控制台输出打开成功的消息。 请注意,在使用MinGW编译器时,您需要使用命令行工具来编译和链接您的代码。例如,您可以使用以下命令编译和链接上面的示例代码: ```bash g++ -c main.cpp -I C:/sqlite g++ main.o -o main.exe -L C:/sqlite -l sqlite3 ``` 第一行命令编译main.cpp文件并生成一个目标文件main.o。-I选项指定了头文件的路径。第二行命令将目标文件链接到SQLite库文件,并生成可执行文件main.exe。-L选项指定了库文件的路径,-l选项指定了要链接的库文件名。 希望这可以帮助您开始在MinGW环境下访问SQLite。如有任何问题,请随时问我!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值