• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    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 //用*号代替目录下所有要编译的文件

    总结

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

    上一篇:docker 启动具有多个网络接口的容器的方法示例
    下一篇:CentOS7.5从零安装Python3.6.6的教程详解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

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