代码块中对 main 的未定义引用

undefined reference to main in code blocks

本文关键字:未定义 引用 main 代码      更新时间:2023-10-16

一些背景故事:我第一次使用 Eclipse,但它在解析命名空间 std 时遇到了问题,所以我切换到 code::blocks,现在我遇到了这个问题。

一切都经过调试,除了一个错误:在函数"_start"中:对"main"(.text+0x20)的未定义引用。但是,我已经定义了main(),并且没有什么花哨的。

代码::

块 版本:13.12编译器:GNU gcc,让 g++ 遵循 c++11

提前谢谢。

主功能没有什么特别之处

//: "main.cpp"
#include "bar.h"
#include "foo.h"
#include <iostream>
using namespace std;
int main() {
    int num;
    bar bar_;
    foo foo_;
    num = calc(bar_, foo_);
    cout << num << endl;
    return 0;
}

这是构建日志:

g++  -o bin/Debug/test obj/Debug/bar.o obj/Debug/foo.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
Process terminated with status 1 (0 minute(s), 0 second(s))
1 error(s), 0 warning(s) (0 minute(s), 0 second(s))
  1. cout << << num << endl;无效(注意两个重复的<<)。这意味着您的main.cpp甚至不应该编译。
  2. 在链接命令中,您不会链接main.omain.cpp的已编译对象文件)。您正在链接foo.obar.o,但您缺少main.o

您需要如何解决此问题:

  1. main.cpp中修复代码
  2. 编译main.cpp以获取对象文件main.o
  3. 将所有对象文件链接在一起。

嗯。

根据代码块网站,当发生此类错误时,

"

不要看"生成消息"选项卡,要查看"生成日志"选项卡"

就我而言:它显示了一个链接器中缺少的.so文件。

这是快速解决方案:

设置>>编译器>>链接器设置选项卡>>将路径添加到 .so 文件(在构建日志中指向)

只需确保要添加的 .so 确实存在于您的系统上即可。

希望这有帮助。干杯。