第一次进行多文件编程遇到的问题,希望各位帮忙解决下

heartgoon2010 2011-08-29 04:49:25
有4个程序文件main.cpp,A.cpp,B.cpp,B.h,内容如下:
main.cpp
#include<stdio.h>
extern int x;
extern int init();
int main()
{
int y;
init();
y=x;
printf("%d\n",y);
return 0;
}

A.cpp
#include "B.h"
int x;

int init(){
Node nd(5);
x=nd.getData();
return x;
}

B.cpp
include "B.h"
Node::Node(int d){
data=d;
}

int Node::getData(){
return data;
}

B.h
class Node{
public:
int data;
Node(int d);
int getData();
};


makefile文件如下书写:
main:main.o A.o
main.o:main.cpp
g++ -c main.cpp
A.o:A.cpp B.h
g++ -c A.cpp


执行make命令时出现了错误。
程序的意思很容易懂,请问该如何修改程序文件和makefile文件才能使程序能编译运行。
...全文
70 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
帅得不敢出门 2011-09-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 heartgoon2010 的回复:]

引用 1 楼 zmlovelx 的回复:
其实用隐含规则就可以了.
只要一行
main:main.o A.o B.o

当然如果你要写全的话.
main:main.o A.o B.o
main.o:main.cpp
g++ -c main.cpp
A.o:A.cpp B.h
g++ -c A.cpp
B.o:B.cpp B.h
g++ -c B.cpp

还是有错误
……
[/Quote]

本人亲自在机子上试过的, 规则下面的命令前用tab格开.
说有错误,我也无话可说.
heartgoon2010 2011-09-03
  • 打赏
  • 举报
回复
ding谁能帮我解答
heartgoon2010 2011-09-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zmlovelx 的回复:]
引用 2 楼 heartgoon2010 的回复:

引用 1 楼 zmlovelx 的回复:
其实用隐含规则就可以了.
只要一行
main:main.o A.o B.o

当然如果你要写全的话.
main:main.o A.o B.o
main.o:main.cpp
g++ -c main.cpp
A.o:A.cpp B.h
g++ -c A.cpp
B.o:B.cpp……
[/Quote]
这样可以

main:main.o A.o B.o
g++ -o main main.o A.o B.o //added
main.o:main.cpp
g++ -c main.cpp
A.o:A.cpp B.h
g++ -c A.cpp
B.o:B.cpp B.h
g++ -c B.cpp

如果只有一句main:main.o A.o B.o的话出现错误:
[root@localhost test]# make
g++ -c -o main.o main.cpp
cc main.o A.o B.o -o main
main.o:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'
A.o:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'
B.o:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'
collect2: ld ·µ»Ø 1
make: *** [main] ´íÎó 1
mymtom 2011-08-29
  • 打赏
  • 举报
回复
main:main.o A.o
g++ -o $@ main.o A.o
heartgoon2010 2011-08-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zmlovelx 的回复:]
其实用隐含规则就可以了.
只要一行
main:main.o A.o B.o

当然如果你要写全的话.
main:main.o A.o B.o
main.o:main.cpp
g++ -c main.cpp
A.o:A.cpp B.h
g++ -c A.cpp
B.o:B.cpp B.h
g++ -c B.cpp
[/Quote]
还是有错误
帅得不敢出门 2011-08-29
  • 打赏
  • 举报
回复
其实用隐含规则就可以了.
只要一行
main:main.o A.o B.o

当然如果你要写全的话.
main:main.o A.o B.o
main.o:main.cpp
g++ -c main.cpp
A.o:A.cpp B.h
g++ -c A.cpp
B.o:B.cpp B.h
g++ -c B.cpp

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧