这是一个有点模糊且难以查明原因的问题之一。我会尽量保持简单。
我创建了一个带有如下标题的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。
答案 0 :(得分:6)
.mm
文件正在调用函数名称的错误版本。围绕C ++编译文件看到的C函数声明,你需要__BEGIN_DECLS
和__END_DECLS
,否则你需要自己做同等的事情。我们的想法是在(Obj-)C ++编译器看到时将这些函数声明标记为extern "C"
,但在任何其他类型的编译器都看不到时。
答案 1 :(得分:0)
不知何故,我设法找出问题所在。它与丢失的文件有关。我使用的解决方案I found here。