当 main 存在时,未定义对 `main' 的引用
Posted
技术标签:
【中文标题】当 main 存在时,未定义对 `main\' 的引用【英文标题】:Undefined reference to `main' , when main exist当 main 存在时,未定义对 `main' 的引用 【发布时间】:2015-10-08 15:08:50 【问题描述】:尝试在 Ubuntu 中使用 Eclipse 创建简单的 c++ 应用程序。我做New>>Project>>Empty Project>>LinuxGcc>>Finish
。然后我用代码在其中添加了 src 源目录和源文件:
#include <iostream>
using namespace std;
int main()
cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
return 0;
在构建过程中出错:
make all
Building file: ../src/testNNN.cpp
Invoking: GCC C++ Compiler
g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/testNNN.d" -MT"src/testNNN.d" -o "src/testNNN.o" "../src/testNNN.cpp"
Finished building: ../src/testNNN.cpp
构建目标:testNNN
Invoking: GCC C++ Linker
g++ -o "testNNN" ./src/testNNN.o
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 0 has invalid symbol index 11
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 1 has invalid symbol index 12
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 2 has invalid symbol index 2
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 3 has invalid symbol index 2
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 4 has invalid symbol index 11
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 5 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 6 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 7 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 8 has invalid symbol index 12
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 9 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 10 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 11 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 12 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 13 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 14 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 15 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 16 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 17 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 18 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 19 has invalid symbol index 21
/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: *** [testNNN] Error 1
【问题讨论】:
你指定了 -std=c++11 我的猜测是您的项目层次结构中有多个testNNN.cpp
的副本。您正在编译一个没有main()
(可能是一个空文件)的文件。请注意,您似乎拥有多个src
目录。
如果是这样的话,那么它会说 main 的多个定义而不是对 main 的未定义引用
【参考方案1】:
您的-o
选项错误,应该是这样的(并且与相关目录保持一致):
g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"../src/testNNN.d" -MT"../src/testNNN.d" "../src/testNNN.cpp" -o "../src/testNNN"
然后../src/testNNN
应该运行。
【讨论】:
这是来自项目的行,看起来相同并且编译得很好: g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/LinuxGcc.d" -MT"src/LinuxGcc.d" -o "src/LinuxGcc.o" "../src/LinuxGcc.cpp"以上是关于当 main 存在时,未定义对 `main' 的引用的主要内容,如果未能解决你的问题,请参考以下文章
如何修复 1120:在初始化八哥部分时访问未定义的属性 main?
编译压缩代码 MFCompress-src-1.01 :对‘***’未定义的引用
clFFT 库:./main_exe:符号查找错误:./main_exe:未定义符号:clfftInitSetupData