简单问题:
我已经创建了一组C助手例程,并试图将它们包含在项目中。我以为下面这样的事情就可以了。
MyFuncs.h公司
typedef struct
{
float n;
} MyStruct;
float Operation(MyStruct ms);
MyFuncs.m公司
#import "MyFuncs.h"
float Operation(MyStruct ms)
{
return ms.n * ms.n;
}
但是,我得到一个链接器错误“Undefined symbols for architecture i386”和“Operation(MyStruct)referenced from x”
是否有其他方式需要设置头文件/实现C文件才能工作?
注意:这是一个使用Xcode 4.5的iOS项目。
最佳答案
不,使用纯C没有问题。通常,源文件将命名为*.c
而不是*.m
,但是将*.c
重命名为*.m
不会导致错误。
不过,有个线索:Operation(MyStruct)
引用自x
如果链接器知道函数参数的类型,那是因为您从C++代码中调用函数。必须在标题中输入extern "C" { ... }
,如下所示:
#ifdef __cplusplus
extern "C" {
#endif
typedef struct
{
float n;
} MyStruct;
float Operation(MyStruct ms);
#ifdef __cplusplus
}
#endif
如果你的项目中没有任何C++(包括ObjaveC++cc>文件),那么这不是你的问题。
关于objective-c - 如何在Objective-C项目中使用纯C文件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12960552/