【发布时间】:2019-03-18 17:43:47
【问题描述】:
我正在尝试使用 Makefile 为 c++(Huffmans 压缩)编译我的项目,但我不断收到此编译器错误:
Undefined symbols for architecture x86_64:
"_main", referenced from:
implicit entry/start for main executable
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [huff] Error 1
因为这是我的任务,我认为我不能将所有代码放到网上,但我应该能够包含我的 Makefile,我将包含我的主 cpp 文件,因为它现在是准系统.
all: huff
huff: HuffmanCompression.o PriorityQueue.o Node.o TreeNode.o FrequencyCounter.o BitStream.o HuffmanTree.o
g++ -Wall -std=c++11 HuffmanCompression.o PriorityQueue.o Node.o TreeNode.o FrequencyCounter.o BitStream.o HuffmanTree.o -o huff
HuffmanCompression.o: HuffmanCompression.cpp PriorityQueue.o HuffmanTree.o
g++ -c HuffmanCompression.cpp
PriorityQueue.o: PriorityQueue.cpp PriorityQueue.h Node.o
g++ -c PriorityQueue.cpp
Node.o: Node.cpp Node.h
g++ -c Node.cpp
TreeNode.o: TreeNode.cpp TreeNode.h
g++ -c TreeNode.cpp
FrequencyCounter.o: FrequencyCounter.cpp FrequencyCounter.h
g++ -c FrequencyCounter.cpp
BitStream.o: BitStream.cpp BitStream.h FrequencyCounter.o
g++ -c BitStream.cpp
HuffmanTree.o: HuffmanTree.cpp HuffmanTree.h TreeNode.o
g++ -c HuffmanTree.cpp
clean:
rm -f huff *.o
这是主要的cpp:
#include <list>
#include "HuffmanTree.h"
#include "PriorityQueue.h"
class HuffmanCompression {
int main(int argc, char** argv) {
//std::list<FrequencyCounter> mylist;
return 0;
}
};
【问题讨论】:
-
你的 makefile 没有提到 main.cpp。这可能应该作为一个错字而不是重复而关闭,但是嗯。
-
你忘记在你的makefile中编译
main.cpp -
@HolyBlackCat 我使用的主要 C++ 名为 HuffmanCompression,我认为我将其包含在 Makefile 中,我对 Makefile 了解不多,通常它们会提供给我们,但这次我们必须形成我们自己的,我不知道我搞砸了哪一部分。谢谢!
-
@NathanOliver ^ 我的主文件是否必须命名为 main.cpp?
-
@DanaSalman “我必须将我的主文件命名为 main.cpp 吗?” 不,您可以随意命名。您只需确保它包含
int main()的全局函数定义,并确保以正确的顺序链接它。你有什么在命名空间中放置一个main()函数。