【发布时间】:2020-11-13 10:05:12
【问题描述】:
从技术上讲,这可能不是 makefile 本身的错误,但我想仔细检查它是否存在或其他地方。
我正在尝试使用
CXX = clang++
CXXFLAGS = -Wall -g -o
OBJECTSENC = huffmandec.o huffmanNode.o tree.o heap.o
OBJECTSDEC = huffmandec.o huffmanNode.o
.SUFFIXES: .o .cpp
all: encoder decoder
encoder: $(OBJECTSENC)
$(CXX) $(CXXFLAGS) encoder $(OBJECTSENC)
decoder: $(OBJECTSDEC)
$(CXX) $(CXXFLAGS) decoder $(OBJECTSDEC)
huffmanNode.o: huffmanNode.cpp huffmanNode.h
huffmandec.o: huffmandec.cpp huffmanNode.h
huffmanenc.o: huffmanenc.cpp huffmanNode.h tree.h heap.h
tree.o: tree.cpp tree.h
heap.o: heap.cpp heap.h
clean:
/bin/rm -f *.o *~
但是当我运行它时,我收到一条错误消息,指出我在 huffmandec.cpp 中有一个未定义的对 huffmanNode(int, char) 的引用。通常,这可能会有一个相当简单的解决方案,但是当我分别编译这两者时(仅尝试使一个可执行文件时),它运行得很好。是不是我做错了什么?
编辑: 命令行和错误是
clang++ -Wall -g -o -c -o huffmandec.o huffmandec.cpp
/tmp/huffmandec-21d583.o: In function `huffmanTree(huffmanNode*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, char)':
/autograder/submission/huffmandec.cpp:18: undefined reference to `huffmanNode::huffmanNode(int, char)'
/autograder/submission/huffmandec.cpp:23: undefined reference to `huffmanNode::huffmanNode(int, char)'
/tmp/huffmandec-21d583.o: In function `main':
/autograder/submission/huffmandec.cpp:71: undefined reference to `huffmanNode::huffmanNode(int, char)'
/autograder/submission/huffmandec.cpp:103: undefined reference to `huffmanNode::getChar()'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
<builtin>: recipe for target 'huffmandec.o' failed
make: *** [huffmandec.o] Error 1
【问题讨论】:
-
是编译失败还是链接失败?能不能也加一下命令行和报错信息?
-
请准确显示您正在运行什么以及输出是什么。我假设缺少的符号应该来自 huffmanNode.o?
-
如果你使用
g++编译器,它的语法会像g++ -o file1 file1.cpp file2.cpp file1.hpp。
标签: c++ makefile clang++ huffman-code