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++使用的常用选项和注意事项

  • 5
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个报错提示"cannot execute 'cc1plus': execvp: No such file or directory"通常是由于缺少编译器导致的。根据引用\[1\]的信息,你可以尝试使用以下命令来安装缺失的编译器: sudo apt-get update sudo apt-get install --reinstall build-essential 这将重新安装编译所需的基本工具。如果你已经尝试过这个方法,但仍然遇到问题,那么可能是由于缺少特定的编译器包。根据引用\[3\]的信息,你尝试安装"g++-aarch64-linux-gn"包,但未能找到该包。这可能是因为该包在你的软件源中不存在。 为了解决这个问题,你可以尝试使用其他可用的编译器包。你可以通过运行以下命令来查看可用的编译器包列表: apt-cache search g++ 然后选择一个适合你系统的编译器包进行安装。如果你不确定应该选择哪个包,你可以尝试安装默认的g++编译器包: sudo apt-get install g++ 这将安装默认的g++编译器包,并希望解决你的问题。如果问题仍然存在,请提供更多的详细信息,以便我能够更好地帮助你解决问题。 #### 引用[.reference_title] - *1* *2* *3* [【ubuntu】gcc: fatal error: cannot execute ‘cc1plus’: execvp: No such file or directory](https://blog.csdn.net/weixin_45800258/article/details/129269515)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值