为什么我看不到项目中的extern功能?

时间:2012-10-22 04:25:32

标签: xcode static symbols

在我的静态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

1 个答案:

答案 0 :(得分:3)

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

即。使用以下代码段

extern "C"
{
    extern UIViewController* UnityGetGLViewController();
}