从.mm文件中的函数内调用C函数

时间:2011-02-13 13:58:34

标签: objective-c c

这是一个有点模糊且难以查明原因的问题之一。我会尽量保持简单。

我创建了一个带有如下标题的C类:

C_Class.h

void do_something(void);

C_Class.c

void do_something(void)
{
}

然后我有一个.mm文件工作得很好,直到其中一个函数我添加了我之前创建的C sub_routine:

  #import "C_Class.h" // included in the .h file 


 // then in the .mm file

 - (void)working_function{
  .... some working code ......
  do_something();

  }

问题是我收到此错误:

 -[MyDotMMfile working_function] in MyDotMMfile.o
 Symbol(s) not found
 Collect2:ld returned 1 exit status

这个问题在其他地方已经answered,但回应似乎与我的情况无关。我在XCode工作,已停止运行我的应用程序,重建它仍然得到相同的错误。因为我是编程新手,所以我觉得它与我调用C函数的方式有关。

任何帮助?


编辑1

如果有人感到如此无私,他们可能download the actually files here

2 个答案:

答案 0 :(得分:6)

.mm文件正在调用函数名称的错误版本。围绕C ++编译文件看到的C函数声明,你需要__BEGIN_DECLS__END_DECLS,否则你需要自己做同等的事情。我们的想法是在(Obj-)C ++编译器看到时将这些函数声明标记为extern "C",但在任何其他类型的编译器都看不到时。

答案 1 :(得分:0)

不知何故,我设法找出问题所在。它与丢失的文件有关。我使用的解决方案I found here