gpt4 book ai didi

c++ - 编译多个 cpp 文件错误 undefined reference to `main'

转载 作者:行者123 更新时间:2023-11-30 02:36:12 26 4
gpt4 key购买 nike

我目前正在学习如何使用 makefile 并将我的 main.cpp 分成多个文件。

这是我目前的结构

├── makefile
└── src
├── Graphics
│   ├── Graphics.cpp
│   └── Graphics.h
└── main.cpp

和我的生成文件

CC = g++
CFLAGS = -c
LFLAGS = -Wall
OUTPUT = game

game : main.o Graphics.o
$(CC) $(LFLAGS) main.o Graphics.o -lSDL2 -lSDL2_image -o $(OUTPUT)
main.o : src/main.cpp
$(CC) $(CFLAGS) src/main.cpp
Graphics.o : src/Graphics/Graphics.cpp
$(CC) $(CFlAGS) src/Graphics/Graphics.cpp -lSDL2

每次我编译。我总是得到这个错误。但是我已经声明了我的主要内容。它是在我的 Graphics.cpp 中寻找一个 main 吗?

/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_line): relocation 0 has invalid symbol index 2
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status
make: *** [Graphics.o] Error 1

这是我的主要功能

#include "Graphics/Graphics.h"

int main(int argc , const char * argv[]){
Graphics graphics;
while(true){
//do things here later
}
return 0;
}

//编辑。

顺便说一句。还有一种方法可以不在 Graphics.cpp 上链接 sdl2,如果删除 -lSDL2。它会给我所有未定义的 sdl2 函数

最佳答案

您的 makefile 中有错字; $(CFlAGS)$(CFLAGS) 不同,意思是 -c尝试编译时未作为命令行选项传递给编译器 src/Graphics/Graphics.cpp .

CC = g++
<b>CFLAGS</b> = -c
LFLAGS = -Wall
OUTPUT = game

game : main.o Graphics.o
$(CC) $(LFLAGS) main.o Graphics.o -lSDL2 -lSDL2_image -o $(OUTPUT)
main.o : src/main.cpp
$(CC) $(CFLAGS) src/main.cpp
Graphics.o : src/Graphics/Graphics.cpp
$(CC) $(<b>CFlAGS</b>) src/Graphics/Graphics.cpp -lSDL2

makefiles 中的变量区分大小写,这意味着即使您想包含 CF<b>L</b>AGS 的内容你反而得到了一个名为 CF<b>l</b>AGS 的未声明变量的内容.


Note: Without -c you are telling g++ to run the linker, and as such it will look for a function named main so that it can produce an executable; graphics.cpp does not contain such function, and the diagnostic you have presented is emitted.

Note: After you have fixed the issue with $(CFlAGS) you will be able to remove -lSDL2 from the relevant line.

关于c++ - 编译多个 cpp 文件错误 undefined reference to `main',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33053325/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com