【发布时间】:2016-01-17 21:57:17
【问题描述】:
我正在尝试在我的 MacBook Pro 上编译一个 C 程序,目前我拥有的文件如下所示:
main.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 文件中忘记了逗号。