Unity3D iOS referenced from: __Z19RegisterMonoModulesv in RegisterMonoModules.o
Undefined symbols for architecture armv7:
"_iOSPluginHelloWorld", referenced from:
__Z19RegisterMonoModulesv in RegisterMonoModules.o
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
유니티3D iOS 플러그인을 만들던 중 위와 같이 에러가 발생했습니다.
[DllImport("__Internal")]
private static extern void iOSPluginHelloWorld(string strMessage);
그러면 빌드 후 자동으로 생성되는 Libraries/Assembly-CSharp.dll.s 과 RegisterMonoModules.cpp에 위 그림과 같이 해당 정보가 포함됩니다.
void iOSPluginHelloWorld(const char* strMessage)
{
NSLog(@"iOS Log 1");
UnitySendMessage("iOSManager", "SetLog", strMessage);
NSLog(@"iOS Log 2");
}
해결하려면 함수 정의를 해줘야합니다. Classes 폴더에 원하시는 m 파일을 하나 만들어 위와 같이 함수 본체를 정의하거나
extern "C"
{
void iOSPluginHelloWorld(const char* strMessage)
{
//NSLog(@"iOS Log 1");
UnitySendMessage("iOSManager", "SetLog", strMessage);
//NSLog(@"iOS Log 2");
}
}
역시나 자동 생성되고 아무 내용없는 RegisterClasses.cpp 에 위와 같이 추가해줘도 됩니다. cpp에 추가할 때는 m과 다르게 extern "C"로 감싸줘야하구요. 그렇지 않다면 처음과 같은 에러가 발생합니다. mm도 마찬가지입니다.
(Filename: /Applications/buildAgent/work/7535de4ca26c26ac/Runtime/ExportGenerated/iPhoneSimulatorPlayerUnityLib/UnityEngineDebug.cpp Line: 54)
EntryPointNotFoundException: iOSPluginHelloWorld
at (wrapper managed-to-native) iOSManager:iOSPluginHelloWorld (string)
at iOSManager.CalliOSFunc (System.String strMessage) [0x00000] in <filename unknown>:0
at TestGUI.OnGUI () [0x00000] in <filename unknown>:0
참고로 유니티3D iOS Player Setting에서 SDK Version을 Simulator SDK로 하면 위와 같은 오류가 발생합니다. 즉, 시뮬레이터에서는 안드로이드와 마찬가지로 플러그인 기능이 작동하지 않는다는거죠.
댓글
댓글 쓰기