当 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' 的引用的主要内容,如果未能解决你的问题,请参考以下文章

使用 ifort/icc 时未定义对“main”的引用

Linux C++ 对 main 进行未定义的引用

如何修复 1120:在初始化八哥部分时访问未定义的属性 main?

编译压缩代码 MFCompress-src-1.01 :对‘***’未定义的引用

clFFT 库:./main_exe:符号查找错误:./main_exe:未定义符号:clfftInitSetupData

ReactJS TypeError:无法读取未定义的属性(读取'main')