在我的静态lib项目(目标:sdk.a)中,我使用了这样的extern函数:
// in the PlatformUnity.h file
extern "C"{
extern UIView * UnityGetGLView();
extern UIViewController * UnityGetGLViewController();
}
// in the PlatformUnity.mm file (*.mm NOT the *.m)
UIView * funcA(){
return UnityGetGLView();
}
UIViewController * funcB(){
return UnityGetGLViewController();
}
在另一个名为Unity-iPhone.xcodeproj的项目中,我使用了SDK.a。 并且有一个名为AppController.mm的文件包含以下代码:
static UIViewController* sGLViewController = nil;
UIViewController* UnityGetGLViewController()
{
return sGLViewController;
}
static UIView* sGLView = nil;
UIView* UnityGetGLView()
{
return sGLView;
}
当我构建Unity-iPhone.xcodeproj时,它告诉我它无法找到UnityGetGLView()函数。链接错误如下:
Undefined symbols for architecture armv7:
"_UnityGetGLViewController", referenced from:_funcB in SDK.a(PlatformUnity.o)
"_UnityGetGLView", referenced from:_funcA in SDK.a(PlatformUnity.o)
这两个函数实际上是在AppController.mm中定义的但是为什么我在链接时找不到它? Unity-iPhone.xcodeproj的另一个链接器标志如下:
-all_load -weak_framework CoreMotion -weak-lSystem
答案 0 :(得分:3)
我能够解决这个问题。原因是我没有在“UnityGetGLViewController”方法中添加extern“C”。编译器将其编译为C ++函数,但实际上它必须编译为C函数。
即。使用以下代码段
extern "C"
{
extern UIViewController* UnityGetGLViewController();
}