gcc如何编译带有源文件的c++程序

发布于 2022-10-01 20:56:28 字数 323 浏览 19 评论 0

我在redhat 9.0下用gcc编译c++文件,有3个文件:hello.h hello.cc main.cc
其中我在main.cc中#include "hello.h",然后用gcc main.cc怎么也编译通不过是什么原因,可能是头文件和源文件没有和到一块,我想问一下各位谁能教我怎么才能编译这样的文件。

注:hello.h中定义了一个简单的类
    hello.cc中有#include "hello.h",然后对hello.h中的成员函数进行定义
如果我将hello.cc中的代码考到hello.h中就没有问题了

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

停顿的约定 2022-10-08 20:56:29

先编译成目标文件,然后合并编译
gcc -c -o hello.o hello.cc
gcc -c -o main.o main.cc
gcc -o hello main.o hello.o

梦里梦着梦中梦 2022-10-08 20:56:29

/*-----------hello.h--------------*/
#include <stdio.h>;

class Testmath
{
public:
float pingjun(int aa,int bb,int cc);
int a;
int b;
int c;
};

/*-----------hello.cc--------------*/

#include "hello.h"

float Testmath::pingjun(int aa,int bb,int cc)
{
a=aa;
b=bb;
c=cc;
float avg;
avg=(float)(a+b+c)/3;
return avg;
}

/*-----------main.cc--------------*/

#include "hello.h"

main()
{
float num;
Testmath testmath;
num=testmath.pingjun(23,34,56);
printf("%f\n",num);
}

假如运行#gcc -o main main.cc
出现以下:/tmp/ccGe3L6y.o(.text+0x1b): In function `main':
: undefined reference to `Testmath::pingjun(int, int, int)'
/tmp/ccGe3L6y.o(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status

假如运行#gcc -c hello.cc
            #gcc -c main.cc
            #gcc -o main hello.o main.o
回出现以下:
main.o(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status

请各位帮忙,多谢!

天冷不及心凉 2022-10-08 20:56:29

/*-----------hello.h--------------*/
#include <stdio.h>;

class Testmath
{
public:
float pingjun(int aa,int bb,int cc);
int a;
int b;
int c;
};

/*-----------hello.cc--------------*/

#include "hello.h"

float Testmath::pingjun(int aa,int bb,int cc)
{
a=aa;
b=bb;
c=cc;
float avg;
avg=(float)(a+b+c)/3;
return avg;
}

/*-----------main.cc--------------*/

#include "hello.h"

main()
{
float num;
Testmath testmath;
num=testmath.pingjun(23,34,56);
printf("%f\n",num);
}

假如运行#gcc -o main main.cc
出现以下:/tmp/ccGe3L6y.o(.text+0x1b): In function `main':
: undefined reference to `Testmath::pingjun(int, int, int)'
/tmp/ccGe3L6y.o(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status

假如运行#gcc -c hello.cc
            #gcc -c main.cc
            #gcc -o main hello.o main.o
回出现以下:
main.o(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status

请各位帮忙,多谢!

喵星人汪星人 2022-10-08 20:56:29

/*-----------hello.h--------------*/
#include <stdio.h>;

class Testmath
{
public:
float pingjun(int aa,int bb,int cc);
int a;
int b;
int c;
};

/*-----------hello.cc--------------*/

#include "hello.h"

float Testmath::pingjun(int aa,int bb,int cc)
{
a=aa;
b=bb;
c=cc;
float avg;
avg=(float)(a+b+c)/3;
return avg;
}

/*-----------main.cc--------------*/

#include "hello.h"

main()
{
float num;
Testmath testmath;
num=testmath.pingjun(23,34,56);
printf("%f\n",num);
}

假如运行#gcc -o main main.cc
出现以下:/tmp/ccGe3L6y.o(.text+0x1b): In function `main':
: undefined reference to `Testmath::pingjun(int, int, int)'
/tmp/ccGe3L6y.o(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status

假如运行#gcc -c hello.cc
            #gcc -c main.cc
            #gcc -o main hello.o main.o
回出现以下:
main.o(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status

请各位帮忙,多谢!

败给现实 2022-10-08 20:56:29

把个gcc换成g++

野鹿林 2022-10-08 20:56:29

好像只用g++不行,
我通过如下方式:
gcc -c hello.cc
gcc -c main.cc
产生hello.o和main.o文件
再用g++ -o main hello.o main.o生成main
即可得到结果37.667

葬花如无物 2022-10-08 20:56:28

能不能把你的命令行和出错信息贴出来

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文