博客
关于我
gcc编译c++文件
阅读量:110 次
发布时间:2019-02-26

本文共 2559 字,大约阅读时间需要 8 分钟。

gcc是编译c语言的,默认情况下,如果直接编译c++程序,会报错:

[root@server demo2]# ls

hello.cpp
[root@server demo2]# cat hello.cpp 
#include <iostream>
using namespace std;
int main(){
  cout<<"hello,c++"<<endl;
  return 0;
}
[root@server demo2]# gcc -o hello hello.cpp 
/tmp/ccAa6oYP.o: In function `main':
hello.cpp:(.text+0xa): undefined reference to `std::cout'
hello.cpp:(.text+0xf): 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+0x14): 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> >&)'
hello.cpp:(.text+0x1c): undefined reference to `std::ostream::operator<<(std::ostream& (*)(std::ostream&))'
/tmp/ccAa6oYP.o: In function `__static_initialization_and_destruction_0(int, int)':
hello.cpp:(.text+0x4a): undefined reference to `std::ios_base::Init::Init()'
hello.cpp:(.text+0x59): undefined reference to `std::ios_base::Init::~Init()'
collect2: error: ld returned 1 exit status

我们可以通过增加参数-lstdc++来编译,结果如下:

[root@server demo2]# gcc -o hello hello.cpp -lstdc++

[root@server demo2]# ls
hello  hello.cpp
[root@server demo2]# ./hello 
hello,c++
[root@server demo2]# 
如果编译c++程序,可以直接通过g++命令来编译,如下:

可以使用更简单的,直接g++ hello.cpp,这样生成的文件就是a.out

[root@server demo2]# g++ hello.cpp 

[root@server demo2]# ls
a.out  hello.cpp
[root@server demo2]# ./a.out 
hello,c++
[root@server demo2]# 

多个文件编译:准备circle.h,circle.cpp,main.cpp

circle.h

#ifndef CIRCLE_H#define CIRCLE_Hclass Circle{  private:    double r;  public:    Circle();    Circle(double r);    double area();};#endif

circle.cpp

#include "circle.h"Circle::Circle(){   this->r = 5;}Circle::Circle(double r){   this->r = r;}double Circle::area(){   return 3.14*r*r;}

main.cpp

#include 
#include "circle.h"using namespace std;int main(){ Circle c(3); cout<<"area => "<
<

多个文件编译,使用gcc编译,就类似这样:gcc -o main main.cpp circle.cpp -lstdc++,该命令编译中,文件不能带上circle.h头文件,否则会报错。

[root@server demo1]# ls

circle.cpp  circle.h  main.cpp
[root@server demo1]# gcc -o main main.cpp circle.cpp -lstdc++
[root@server demo1]# ls
circle.cpp  circle.h  main  main.cpp
[root@server demo1]# ./main
area => 28.26
[root@server demo1]# 

使用g++编译:可以带上头文件circle.h

[root@server demo1]# ls

circle.cpp  circle.h  main.cpp
[root@server demo1]# g++ -o main2 main.cpp circle.h circle.cpp
[root@server demo1]# ls
circle.cpp  circle.h  main2  main.cpp
[root@server demo1]# ./main2 
area => 28.26
[root@server demo1]# 

转载地址:http://xzey.baihongyu.com/

你可能感兴趣的文章
【Flink】Flink 2023 Flink易用性和稳定性在Shopee的优化-视频笔记
查看>>
Netty5.x 和3.x、4.x的区别及注意事项(官方翻译)
查看>>
netty——bytebuf的创建、内存分配与池化、组成、扩容规则、写入读取、内存回收、零拷贝
查看>>
netty——Channl的常用方法、ChannelFuture、CloseFuture
查看>>
netty——EventLoop概念、处理普通任务定时任务、处理io事件、EventLoopGroup
查看>>
netty——Future和Promise的使用 线程间的通信
查看>>
netty——Handler和pipeline
查看>>
Vue输出HTML
查看>>
netty——黏包半包的解决方案、滑动窗口的概念
查看>>
Netty中Http客户端、服务端的编解码器
查看>>
Netty中使用WebSocket实现服务端与客户端的长连接通信发送消息
查看>>
Netty中实现多客户端连接与通信-以实现聊天室群聊功能为例(附代码下载)
查看>>
Netty中的组件是怎么交互的?
查看>>
Netty中集成Protobuf实现Java对象数据传递
查看>>
netty之 定长数据流处理数据粘包问题
查看>>
Netty事件注册机制深入解析
查看>>
netty代理
查看>>
Netty入门使用
查看>>
netty入门,入门代码执行流程,netty主要组件的理解
查看>>
Netty原理分析及实战(一)-同步阻塞模型(BIO)
查看>>