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

gra*_*ack 37 symbols compilation g++ undefined

我正在尝试使用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
Run Code Online (Sandbox Code Playgroud)

......这意味着什么?它可能会成为我的代码的一个问题,但我觉得它可能比这更深,因为我已经为几个不同的项目得到了同样看似莫名其妙的错误,其中许多项目以不同方式解决,不幸的是完全意外地.

我在某处读到它可能与我是使用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
Run Code Online (Sandbox Code Playgroud)

代替.

主要是我只想知道错误所说的世界是什么.我习惯于调试在代码中给出特定行等的编译时错误,但我无法从中识别出类似的内容.有任何想法吗?

如果它有所帮助,我将使用2008年末的Macbook和Intel Core 2 Duo(64位),而我正在运行OS X Lion(10.7.2),我认为这是最新版本.另外,我使用的是gcc 4.2.1版.

Nic*_*idt 42

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

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

或者您要执行编译的文件.然后你需要实现这个功能main.

  • 你会在哪里使用这个-c标志?你能给我举个例子吗? (3认同)
  • @Goldname 我能够在命令行终端中将 -c 标志传递给我的 C 编译器(gcc)(我在 Macbook 上并且正在使用终端)。我在 CLI 中输入了以下内容:`gcc -c myfilename.c` (2认同)