【问题标题】:Makefile issue (Undefined symbols for architecture x86_64: "_main", referenced from: implicit entry/start for main executable) [duplicate]Makefile问题(架构x86_64的未定义符号:“_main”,引用自:主要可执行文件的隐式条目/启动)[重复]
【发布时间】: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() 函数。

标签: c++ makefile


【解决方案1】:

有两个单独的错误。

首先,您忘记将main.cpp 添加到您的makefile。

其次,您的main.cpp 不包含名为main 的全局函数。名为main 的类成员函数不符合条件。您需要一个名为 main 的函数,位于全局命名空间中并具有外部链接。

【讨论】:

    猜你喜欢
    • 2021-10-17
    • 1970-01-01
    • 2022-12-12
    • 2015-05-06
    • 2014-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-29
    相关资源
    最近更新 更多