【问题标题】:Compiling C program on Mac results in `Undefined symbols for architecture x86_64` error [duplicate]在 Mac 上编译 C 程序会导致“架构 x86_64 的未定义符号”错误 [重复]
【发布时间】:2016-01-17 21:57:17
【问题描述】:

我正在尝试在我的 MacBook Pro 上编译一个 C 程序,目前我拥有的文件如下所示:

ma​​in.c

#include <stdio.h>
#include "blah.h"

int main(int argc, char *argv[])
{ 
    //do stuff
    return 0;
}

blah.h

extern void method1()
extern void method2()
extern void method3()

blah.c

#include <stdio.h>
#include <stdlib.h>
#include "blah.h"

void method1()
{
    //do stuff
}

void method2()
{
    //do stuff
}

void method3()
{
    //do stuff
}

但是,当我尝试编译时,出现如下错误:

$ gcc main.c -o main
Undefined symbols for architecture x86_64:
  "_method1", referenced from:
      _main in ccVPIYad.o
  "_method2", referenced from:
      _main in ccVPIYad.o
  "_method3", referenced from:
      _main in ccVPIYad.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status

我认为这是因为 Mac 编译器在每个函数名称前添加了一个下划线,但我不知道如何解决这个问题。我尝试将blah.h 更改为:

extern void method1() asm ("create_list");
extern void method2() asm ("print");
extern void method3() asm ("insert_front");

但这并不能解决问题。

【问题讨论】:

  • 从函数声明中删除extern
  • 您需要在编译命令中包含blah.c
  • 与答案基本相同的问题,stackoverflow.com/questions/17019908/…
  • 1.函数不需要extern 关键字。 2. 你在 blah.h 文件中忘记了逗号。

标签: c macos gcc


【解决方案1】:

实际的函数定义在另一个你没有编译的源文件中。

做:

 gcc blah.c main.c -o main

【讨论】:

    【解决方案2】:
    1. 什么@l3xwrote
    2. 删除extern并添加分号

    更新blah.h:

    void method1();
    void method2();
    void method3();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-20
      • 2017-03-03
      • 2012-08-20
      • 2015-06-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多