编译时错误"架构x86_64"的未定义符号是什么?意思?

时间:2011-12-09 00:33:36

标签: compilation g++ undefined symbols

我正在尝试使用C ++教科书中示例中的相邻列表来编写图表类,当我使用此命令编译时: 码: g ++ -o prog program.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年末的Macbook和Intel Core 2 Duo(64位),我正在运行OS X Lion(10.7.2),我认为这是最新版本。另外,我正在使用gcc版本4.2.1。

1 个答案:

答案 0 :(得分:41)

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

您不想运行链接器,因为您想分别编译多个文件然后组合。在这种情况下,使用-c标志告诉编译器跳过链接阶段。

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