gcc如何编译带有源文件的c++程序
我在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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
先编译成目标文件,然后合并编译
gcc -c -o hello.o hello.cc
gcc -c -o main.o main.cc
gcc -o hello main.o hello.o
/*-----------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
请各位帮忙,多谢!
/*-----------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
请各位帮忙,多谢!
/*-----------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
请各位帮忙,多谢!
把个gcc换成g++
好像只用g++不行,
我通过如下方式:
gcc -c hello.cc
gcc -c main.cc
产生hello.o和main.o文件
再用g++ -o main hello.o main.o生成main
即可得到结果37.667
能不能把你的命令行和出错信息贴出来