如何在objective-c项目中使用纯C文件?
简单的问题:
我创建了一堆C helper例程,并试图将它们包含在项目中。 我曾假设以下内容可以。
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; }
但是,我收到链接器错误“架构i386的未定义符号”和“从x引用的操作(MyStruct)”
还有其他方法需要设置标头/实现C文件才能工作吗?
注意:这适用于使用Xcode 4.5的iOS项目。
不,使用纯C没有问题。通常,源文件将命名为*.c
而不是*.m
,但将*.c
重命名为*.m
不应导致错误。
但是,有一个线索:
从
x
引用的Operation(MyStruct)
如果链接器知道函数参数的类型,那是因为你从C ++代码调用函数。 您必须在标题中放置extern "C" { ... }
,如下所示:
#ifdef __cplusplus extern "C" { #endif typedef struct { float n; } MyStruct; float Operation(MyStruct ms); #ifdef __cplusplus } #endif
如果您的项目中没有任何C ++(包括Objective-C ++ *.mm
文件),那么这不是您的问题。
如果它是纯c,则“MyFuncs.c”而不是“MyFuncs.m”会更好。
使用扩展名.mm调用实现文件,如MyFuncs.mm。