Ubuntu环境下使用G++编译CPP文件

 更新时间:2018年10月16日 14:17:23   作者:数据架构师  
今天小编就为大家分享一篇关于Ubuntu环境下使用G++编译CPP文件,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

第一次用g++编译cpp文件的时候报了undefined reference的错误,自定义类中的函数全部都无法找到,查找资料后发现调用的类是需要链接的,本文以一个小例子描述编译的过程。其中class2类调用了class1类的成员函数,依赖于class1类,而test文件调用了class2类的成员函数,依赖于class1类。

//class1.h
#ifndef _CLASS1_H
#define _CLASS1_H
class class1
{
public:
  int f(int i);
};
#endif
//class1.cpp
#include<iostream>
#include "class1.h"
using namespace std;
int class1::f(int i)
{
  if (i==0 || i==1)
   return 1;
  else
   return f(i-1)+f(i-1);
}
//class2.h
#ifndef _CLASS2_H
#define _CLASS2_H
#include "class1.h"
class class2
{
public:
  int double_f(int i);
};
#endif
//class2.cpp
#include<iostream>
#include "class2.h"
using namespace std;
int class2::double_f(int i)
{
  class1 c;
  return 2*c.f(i);
}
//test.cpp
#include<iostream>
#include "class2.h"
using namespace std;
int main()
{
  class2 c2;
  cout << c2.double_f(4) <<endl;
  return 0;
}

先把类class1和类class2以及test文件编译成.o格式的文件

g++ -c class1.cpp
g++ -c class2.cpp
g++ -c test.cpp

由于class1和class2是被依赖的,需要打包成静态库文件(.a格式)用于链接

ar -rc class1.a class1.o
ar -rc class2.a class2.o

最后一步就是将test.o链接成可执行文件

g++ -o test test.o class2.a class1.a

执行后得到可执行文件test,使用./test指令就可以执行。这里注意链接时静态链接库的顺序,必要保证前面的依赖后面的的顺序,如这里test依赖class2,class2依赖class1,则链接时test需要写在calss2前,class2需要写在class1,前,否则就会有undefined reference的错误。

g++同时编译多个文件的方法

对于这个例子,文件被放置在/CPPPFrtory目录中。使用CD命令进入包含源文件的文件夹。
通过在命令行上列出文件来编译程序,类型:

方法一:g++ Hello.cpp Welcome2.cpp -o Welcome2.out -ansi  //两个cpp源文件,编译后只生成一个 .out 文件
方法二:使用“通配符”编译程序,类型:g++ *.cpp -o Welcome2.out -ansi //用*号代替目录下所有要编译的文件

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

相关文章

  • Linux中拷贝 cp命令中拷贝所有的写法详解

    Linux中拷贝 cp命令中拷贝所有的写法详解

    本篇文章主要介绍了Linux中拷贝 cp命令中拷贝所有的写法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2016-12-12
  • vmware中CentOS7网络设置教程详解

    vmware中CentOS7网络设置教程详解

    这篇文章主要为大家详细介绍了vmware中CentOS7网络设置教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • Linux中FTP服务器的搭建教程

    Linux中FTP服务器的搭建教程

    这篇文章主要为大家详细介绍了Linux中FTP服务器的搭建教程,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • apache下支持asp.net的实现方法

    apache下支持asp.net的实现方法

    让apache支持asp.net的设置步骤。
    2009-12-12
  • Linux 7.4上安装配置Oracle 11.2.0.4图文教程

    Linux 7.4上安装配置Oracle 11.2.0.4图文教程

    本文通过图文并茂的形式给大家介绍了Linux 7.4上安装配置Oracle 11.2.0.4的方法,非常不错,具有参考借鉴价值,需要的朋友参考下吧
    2017-12-12
  • Linux下rsync远程数据同步命令的详细介绍

    Linux下rsync远程数据同步命令的详细介绍

    rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。rsync软件适用于unix/linux/windows等多种操作系统平台。下面这篇文章主要介绍了Linux下rsync命令的相关资料,需要的朋友可以参考借鉴。
    2017-02-02
  • Ubuntu14.04搭建Caffe(仅CPU)详解教程

    Ubuntu14.04搭建Caffe(仅CPU)详解教程

    这篇文章主要介绍了Ubuntu14.04搭建Caffe(仅CPU)详解教程,操作系统是Ubuntu 14.04,本文分步骤给大家介绍的非常详细,具有参考借鉴价值,需要的朋友可以参考下
    2016-11-11
  • LINUX查看进程的4种方法(小结)

    LINUX查看进程的4种方法(小结)

    这篇文章主要介绍了LINUX查看进程的4种方法(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • MemcacheQ安装及使用方法

    MemcacheQ安装及使用方法

    MemcacheQ 是一个简单的分布式队列服务,它的运行依赖于BerkeleyDB 和 libevent,所以需要先安装BerkeleyDB和libevent,需要的朋友可以参考下
    2017-03-03
  • 使用VMware 15 安装虚拟机和使用CentOS 8的步骤详解

    使用VMware 15 安装虚拟机和使用CentOS 8的步骤详解

    这篇文章主要介绍了使用VMware 15 安装虚拟机和使用CentOS 8的详细步骤,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01

最新评论