【问题标题】:Strange Compiler Error: "undefined reference to 'main'"奇怪的编译器错误:“未定义对'main'的引用”
【发布时间】:2011-08-29 00:45:01
【问题描述】:

谁能告诉我这是什么意思?

/usr/lib/i386-linux-gnu/gcc/i686-linux-gnu/4.5.2/../../../crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
collect2: ld returned 1 exit status
make: *** [program] Error 1

我的 make 文件如下所示:

program : main.o render.o screenwriter.o
    g++ -o main.o render.o screenwriter.o -lSDL

main.o : main.cpp render.h screenwriter.h
    g++ -c main.cpp render.h screenwriter.h -lSDL

render.o : render.h render.cpp
    g++ -c render.h render.cpp -lSDL

screenwriter.o : screenwriter.h screenwriter.cpp
    g++ -c screenwriter.h screenwriter.cpp -lSDL

clean:
    rm program main.o render.o screenwriter.o -lSDL

谢谢。

【问题讨论】:

    标签: c++ undefined-reference


    【解决方案1】:

    第一条规则应该是

    program : main.o render.o screenwriter.o
        g++ -o program main.o render.o screenwriter.o -lSDL
    

    假设您要将main.o render.o screenwriter.o 链接到名为program 的可执行文件中

    另外,在编译步骤 (-c) 中,-lDSL 位没有用,它是一个链接器指令。

    【讨论】:

      【解决方案2】:

      将第二行改为:

      g++ -o program main.o render.o screenwriter.o -lSDL
             ^^^^^^^
      

      否则您的 输出 是 main.o,而您在输入中缺少它。

      比人工维护还好用special macros

      $(CXX) -o $@ $+ -lSDL
      

      因此,即使您扩展程序,也不必再次编辑该命令。

      【讨论】:

        猜你喜欢
        • 2015-08-25
        • 2020-08-28
        • 2017-05-08
        • 2012-08-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-23
        相关资源
        最近更新 更多