makefile 错误

发布于 2022-08-26 16:22:17 字数 2571 浏览 7 评论 0

在ubuntu下面写算法,用makefile进行自动编译.

我的目录结构如下:

  • graph

    • main.cpp
    • graph.cpp
    • vertex.cpp
    • edge.cpp
    • graph.h
    • vertex.h
    • edge.h
  • union_find_set

    • main.cpp
    • union_find.cpp
    • union_find_set.cpp
    • union_find.h
    • union_find_set.h

依赖关系是这样的:

union_find.h引用了graph目录下面的vertex.h graph.cpp 引用了union_find_set目录下面的union_find_set.h.

其他的都是引用各自目录下面的文件了。

我的makefile如下:

union_find_set目录下面的makefile

union_find_set : main.o union_find_set.o union_find.o
    g++ -o union_find_set main.o union_find_set.o union_find.o

main.o : main.cpp union_find_set.h
    g++ -c main.cpp
union_find_set.o : union_find_set.cpp union_find_set.h
    g++ -c union_find_set.cpp

union_find.o : union_find.cpp union_find.h
    g++ -c union_find.cpp

clean:
    rm union_find_set *.o

2. graph目录下面的makefile

#include ../union_find_set/makefile

graph : main.o graph.o edge.o vertex.o
    g++ -o graph main.o graph.o edge.o vertex.o
main.o : main.cpp graph.h
    g++ -c main.cpp
graph.o : graph.cpp graph.h ../union_find_set/union_find_set.h
    g++ -c graph.cpp

edge.o : edge.cpp edge.h
    g++ -c edge.cpp

vertex.o : vertex.cpp vertex.h
    g++ -c vertex.cpp

clean :
    rm graph *.o

最后编译出现如下错误:

g++ -o graph main.o graph.o edge.o vertex.o graph.o: In function Graph::Kruskal()': graph.cpp:(.text+0x1328): undefined reference toUnionFindSet::UnionFindSet()' graph.cpp:(.text+0x13c4): undefined reference to Node::Node(Node*, int)' graph.cpp:(.text+0x13e3): undefined reference toNode::setData(Vertex)' graph.cpp:(.text+0x13f5): undefined reference to UnionFindSet::addNode(Node*)' graph.cpp:(.text+0x1641): undefined reference toUnionFindSet::findNode(Vertex)' graph.cpp:(.text+0x1656): undefined reference to UnionFindSet::findNode(Vertex*)' graph.cpp:(.text+0x166b): undefined reference toUnionFindSet::findSet(Node)' graph.cpp:(.text+0x167f): undefined reference to UnionFindSet::findSet(Node*)' graph.cpp:(.text+0x16bb): undefined reference toUnionFindSet::merge(Node, Node*)' collect2: ld returned 1 exit status make: *** [graph] Error 1

这几个函数都是union_find_set.h中定义的函数,在graph.cpp中的kruskal函数中用到,请问我的makefile错在哪里啊 多谢了

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

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

发布评论

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

评论(1

把昨日还给我 2022-09-02 16:22:17

链接时找不到union_find_set.h中声明的函数,你应该是在union_find_set.cpp中定义的这些函数
所以应该在生成graph时加上union_find_set.o
也就是

graph : main.o graph.o edge.o vertex.o  
    g++ -o graph main.o graph.o edge.o vertex.o

改为

graph : main.o graph.o edge.o vertex.o union_find_set.o  
    g++ -o graph main.o graph.o edge.o vertex.o union_find_set.o  

这样链接时就会在union_find_set.o中找到之前undefined reference to XXX的那些

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