1

在我的静态库项目(目标:sdk.a)中,我使用了这样的外部函数:

// 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
4

1 回答 1

3

我能够解决这个问题。原因是我没有将 extern "C" 添加到 "UnityGetGLViewController" 方法中。编译器将其编译为 C++ 函数,但实际上它必须编译为 C 函数。

即使用以下代码片段

extern "C"
{
    extern UIViewController* UnityGetGLViewController();
}
于 2012-12-12T09:00:35.600 回答