gcc编译c++程序

本文分享了使用GCC编译器在Linux环境下编译C++程序的具体步骤与常见错误解决方法,包括安装必要组件及手动链接C++标准库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原来一直以为gcc是c的linux下的编译器,g++是c++的linux下的编译器,今天偶尔看到一个说明文档,大体内容是gcc已经不单纯的可以编译C语言,它支持C, C++, Objective-C, Fortran, Java,  Ada的编译,如果不指名编译语言,默认由后缀名决定。感觉好神奇,就亲自想用gcc来编译一个c++的helloworld。步骤如下:

 

1.用vim直接打开hello.cpp,编译一个简单的hello world,用:wq命令保存,退出。

 

2.直接最简单的默认命令gcc hello.cpp, 哦,竟然报错 gcc: error trying to exec 'cc1plus' ...,我刚编译了一个c的程序,gcc编译器肯定能用的,难道gcc不能编译c++,不会哦,官方文档应该不会有错。于是上网搜了一下,说报错的原因是因为Ubuntu虽然默认安装了gcc编译器但是并没有安装所有的C语言的类库和工具,那就安装吧, 命令: sudo apt-get install build-essential 安装完成。

 

3.按向上键或者重新写一下 gcc hello.cpp,晕咯,这次报错报的更多,如下 /tmp/cc0jIPMU.o: In function `main':

 

hello.cpp:(.text+0x14): undefined reference to `std::cout'

hello.cpp:(.text+0x19): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'

hello.cpp:(.text+0x21): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)' ...

简直要晕死了,这次又Google,最后的解释是虽然gcc可以用来编译c++但是它不会自动的调用链接c++的库,你需要自己手动链接,使用如下命令: gcc -l stdc++ hello.cpp,顺利编译通过,使用./a.out查看,打印出hello world,成功。

 

4.最后说明一下用g++可以很方便的完成,完全是画蛇添足。

 

### 使用 GCC 编译 C++ 程序并正确链接 `libstdc++` 标准库 当使用 GCC 编译 C++ 程序时,默认情况下会自动链接 `libstdc++.so` 动态库。然而,在某些特定需求下,比如为了提高程序的可移植性或者解决依赖问题,可以选择不同的方式来链接这个标准库。 对于动态链接而言,通常不需要额外指定参数,因为这是默认行为。编译命令如下所示: ```bash g++ source.cpp -o program ``` 如果希望静态链接 `libstdc++` 库,则可以使用 `-static-libstdc++` 参数。这只会将 `libstdc++.a` 静态库嵌入到最终生成的二进制文件中,而不会影响其他部分的链接方式[^3]。 ```bash g++ source.cpp -o program -static-libstdc++ ``` 另外还有更全面的选择是通过 `-static` 参数实现完全静态链接,即不仅限于 `libstdc++` 而是对所有外部库都采用静态链接形式。需要注意的是这种方式可能会使生成的应用程序体积增大,并且有可能引入兼容性方面的问题。 ```bash g++ source.cpp -o program -static ``` 值得注意的一点是在较新的GCC版本里,有时还需要显式指明路径以便能够找到所需的头文件以及静态库的位置。可以通过配置环境变量或是直接在编译指令中加入相应选项完成设置[^4]。 #### 示例:构建过程中的具体操作 假设正在安装自定义版本的 GCC 和其配套的标准库,那么可以在解压源码包之后进入相应的目录创建一个新的子目录用于存放编译产物,并在此基础上执行配置脚本与实际编译工作。以下是基于给定资料的一个简化版流程示例: ```bash tar zxvf gcc-version.tar.gz cd gcc-version/ mkdir build && cd build ../libstdc++-v3/configure --prefix=/usr/local/gcc-installation \ --disable-multilib \ --disable-nls \ --with-gxx-include-dir=/usr/local/gcc-installation/include/c++/version make make install ``` 以上步骤完成后即可按照前述方法尝试编译测试项目以验证新环境中是否能正常调用 `libstdc++` 的功能特性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值