这是一个有点模糊且很难查明原因的问题。我会尽量保持简单。
我创建了一个带有如下 header 的 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 .
最佳答案
.mm
文件正在寻找调用函数名称的错位版本。您需要围绕 C++ 编译文件看到的 C 函数声明使用 __BEGIN_DECLS
和 __END_DECLS
,或者您需要自己执行等效操作。这个想法是在 (Obj-)C++ 编译器看到时将这些函数声明标记为 extern "C"
,但在任何其他类型的编译器看到时则不会。
关于objective-c - 从 .mm 文件中的函数内部调用 C 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4984523/