简单问题:
我已经创建了一组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/

10-13 03:56