g++使用----基本使用方法

基本命令

g++是linux下最常用的编译工具,是GNU的 C++编译器。C++的代码生成过程一般为四个步骤:

  • 预处理
  • 将预处理后文件转换为汇编语言
  • 将汇编语言变为目标代码(一般为机器代码)
  • 链接,生成可执行程序

下面通过示例演示完整步骤:

以boost库安装后使用为例,示例中的功能需要指定include目录,链接对应的lib库
#include <iostream>

// Boost测试程序
#include <boost/version.hpp>
#include <boost/config.hpp>

// 时间与日期
#include <boost/date_time/gregorian/gregorian.hpp>
using namespace boost::gregorian

int main()
{
        std::cout << "版本号(数字):" << BOOST_VERSION << std::endl;
        std::cout << "版本号(字符串):" << BOOST_LIB_VERSION << std::endl;
        std::cout << "操作系统:" << BOOST_PLATFORM << std::endl;
        std::cout << "编译器:" << BOOST_COMPILER << std::endl;
        std::cout << "标准库:" << BOOST_STDLIB << std::endl;

        std::cout << day_clock::local_day() << endl;

        return 0;
}
  • 预处理:
g++ -E -I /usr/local/include/  boost_test.cpp > pre.i

预处理命令参数为 -E 预处理会寻找头文件,因此需要-I 指定include路径信息,预处理的过程不会自动生成文件,通过输出重定向到了自定义的文件中,此处为pre.i,也可以生成未pre.txt类型,该文件可以直接查看内容

  • 生成汇编文件,即预处理与编译过程
g++ -S -I /usr/local/include/ boost_test.cpp 

g++ -S 完成了预处理和汇编的过程,未指定输出时,该过程会生成同名的汇编文件,即boost_test.s,该文件也可以通过vim打开直接查看内容,主要为汇编语句

  • 生成目标代码
g++ -c boost_test.cpp -I /usr/local/include/

g++ -c 选项激活预处理,编译,和汇编,最后会生成同名的.o文件,该文件已经是机器代码,因此直接通过vim打开会出现乱码,想要查看生成的函数调用信息,可以通过nm命令查看,例如想要看看local_day()有没有生成,通过如下方法

nm boost_test.o |grep local_day

输出信息:

0000000000001910 T __ZN5boost9date_time9day_clockINS_9gregorian4dateEE13local_day_ymdEv
0000000000000d20 T __ZN5boost9date_time9day_clockINS_9gregorian4dateEE9local_dayEv
  • 链接生成可执行文件
    在实际工程项目比较少时,可以考虑一次生成
g++ boost_test.cpp -I /usr/local/include -L /usr/local/lib -lboost_date_time

-L编译选项指定了链接的库所在目录,-l则指定了链接的库名称,在linux下库文件名一般为lib开头,即libboost_data_time.a,链接时,去掉lib和.a即可。
由于我们已经生成了boost_test.o文件,因此可以直接通过链接多个.o文件生成可执行文件

g++ boost_test.o -L /usr/local/lib

系统默认生成的可执行文件名为a.out
执行该文件

./a.out 
版本号(数字):106400
版本号(字符串):1_64
操作系统:Mac OS
编译器:Clang version 8.1.0 (clang-802.0.42)
标准库:libc++ version 3700
2017-Sep-19

可以看到文件生成成功,但是a.out文件名不便使用,而且容易被覆盖,可以通过

g++ boost_test.o -L /usr/local/lib -o boost_test

生成文件名为boost_test的文件(linux下文件名后缀不影响格式)
在之前的步骤中,均可用通过-o 指定输出文件名。

补充

g++ 的命令参数选项很多,具有很强大的编译功能,可以通过man g++查询或者通过官方文档了解深入,后续会继续介绍g++使用的常用选项和注意事项

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值