简单的问题:
我创建了一堆ç辅助函数的,我试图将它们纳入一个项目。 我曾以为像下面将是确定的。
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;
}
但是,我得到一个链接错误“从X引用操作(MYSTRUCT)”“为i386硬件架构未定义的符号”和
有一些其他的方式,头/实行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 ++(包括目标-C ++ *.mm
文件),那么这是不是你的问题。
如果是纯C则“MyFuncs.c”而不是“MyFuncs.m”会更好。
调用带扩展名.mm像MyFuncs.mm实现文件。