compilation - 编译时错误 "Undefined symbols for architecture x86_64"是什么意思?

标签 compilation g++ undefined symbols

我正在尝试使用 C++ 教科书中示例中的相邻列表来编写图形类,当我使用以下命令进行编译时: 代码: g++ -o prog 程序.cpp ...我收到以下错误:

Undefined symbols for architecture x86_64:
  "_main", referenced from:
      start in crt1.10.6.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

...这到底是什么意思?这可能是我的代码的问题,但我觉得它可能比这更深层,因为我在几个不同的项目中都遇到了同样的看似莫名其妙的错误,其中许多都是以不同的方式解决的,不幸的是完全解决了偶然。

我在某处读到,这可能与我使用的是 32 位还是 64 位库有关,并且可能需要使用标签 -m32 或 -m64,但我不确定这是否适用于这里。有趣的是,当我尝试添加 -m64 标签时,我得到了同样的错误,但是当我尝试使用 -m32 标签时,我得到了同样的错误,除了它说

Undefined symbols for architecture i386:
  "_main", referenced from:
      start in crt1.10.6.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

相反。

主要是我只是想知道这个错误到底在说什么。我习惯于调试编译时错误,这些错误会在代码中给出特定行等,但我无法从中辨别出类似的内容。有什么想法吗?

如果有帮助的话,我使用的是 2008 年末配备 Intel Core 2 Duo(64 位)的 Macbook,并且运行的是 OS X Lion (10.7.2),我认为这是最新版本。另外,我使用的是 gcc 版本 4.2.1。

最佳答案

当您编译文件时,编译器会调用尝试生成可执行文件的链接器。但它不能,因为您没有提供名为 main 的函数,该函数将在程序启动时执行。

您可能不想运行链接器,因为您想单独编译多个文件,然后将它们组合起来。在这种情况下,请使用 -c 标志告诉编译器跳过链接阶段。

或者您想要执行编译后的文件。然后你需要实现函数main

关于compilation - 编译时错误 "Undefined symbols for architecture x86_64"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8439664/

相关文章:

c++ - 这些编译器选项放到一个 CMakeLists.txt 中

c++ - 掩码设置为 0 时不生成核心文件

reactjs - AsyncStorage.getItem 返回未定义 : React Native

java - 为什么下面的代码会导致 javac 崩溃?可以做些什么呢?

.net - 将 .NET 可执行文件转换为 native 可执行文件

c++ - 当我以不同方式定义对同一变量的引用时,结果不同

c++ - g++ 坚持使用 std::string 而不是 string

reactjs - 为什么我的 react 表说列未定义?

JavaScript 无法将 json 元素识别为数字

Java varargs - 为什么这些语法 Not Acceptable ?