编译多个 cpp 文件 对"主"的未定义引用错误
Compiling a multiple cpp files Error undefined reference to `main'
我目前正在学习如何使用makefile,目前将我的main.cpp划分为多个文件。
这是我当前的结构
├── makefile
└── src
├── Graphics
│ ├── Graphics.cpp
│ └── Graphics.h
└── main.cpp
和我的makefile
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
每次编译时。我总是得到这个错误。但是我已经宣布了我的主菜单。它是在寻找一个主在我的图形。cpp?
/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
下面是我的main函数
#include "Graphics/Graphics.h"
int main(int argc , const char * argv[]){
Graphics graphics;
while(true){
//do things here later
}
return 0;
}
//编辑。
顺便说一句。如果删除-lSDL2,是否也有一种方法不链接到Graphics.cpp上。它会给我所有sdl2函数undefined
你的makefile中有一个错别字;$(CFlAGS)
与$(CFLAGS)
不一样,这意味着当试图编译src/Graphics/Graphics.cpp
时,-c
不会作为命令行选项传递给编译器。
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
makefiles中的变量是区分大小写的,这意味着即使您想包含CFLAGS
的内容,您也会得到一个名为CFlAGS
的未声明变量的内容。
注意:如果没有
-c
,你告诉g++
运行链接器,因此它将寻找一个名为main
的函数,以便它可以生成一个可执行文件;graphics.cpp
不包含此功能,并且发出您所提供的诊断。
注意:在您修复了
$(CFlAGS)
的问题后,您将能够从相关行中删除-lSDL2
。
在你的错误信息中说:
make: *** [Graphics.o] Error 1
这意味着这个错误发生在编译Graphics.o
时,而不是链接game
时。
编译Graphics.o
的命令是
$(CC) $(CFlAGS) src/Graphics/Graphics.cpp -lSDL2
-lSDL2
在这里没有意义:您想要编译一个目标文件,因此链接器不涉及。但是你会得到链接错误,为什么?
因为要在没有链接的情况下编译,您需要-c
选项。这是CFLAGS
变量的一部分。但是您使用的不是CFLAGS
,而是CFlAGS
(小写的l
)。所以我打赌make正在运行的命令看起来像
g++ src/Graphics/Graphics.cpp -lSDL2
没有-c
.
-lSDL2
,大写L
的变量名。
相关文章:
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- C++引用错误
- 已定义函数时出现 G++ "未定义的引用"错误
- 链接 cmake 时出现未定义的引用错误
- 只有级联分类器会发出未定义的引用错误
- 2个模板化类的非模板友元函数未定义引用错误
- C/C++ 取消引用错误:在空检查之前取消引用
- 为什么我的C++代码无法编译,出现未定义的引用错误
- 我的代码中C++未定义的引用错误?
- 模板专用化会导致未定义的引用错误
- .cpp文件中未定义的引用错误
- c++ 中目录中文件的未定义引用错误
- Opencv4 使用 pkg-config 给出未定义的引用错误
- 使用Cygwin C++时出现未定义的引用错误,为什么我的文件没有链接?
- 共享指针取消引用错误
- 编译简单的多文件类程序时出现未定义的引用错误
- 模板函数产生未定义的引用错误
- 调用提取重加载器会产生对"运算符"的未定义引用错误>>
- 如何修复"未定义的引用"错误 opencv 和 g++
- 未定义的引用错误,我该怎么办?