Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为iOS编译libGDX项目:本机链接失败_Ios_Xamarin.ios_Avfoundation_Libgdx_Objectal - Fatal编程技术网

为iOS编译libGDX项目:本机链接失败

为iOS编译libGDX项目:本机链接失败,ios,xamarin.ios,avfoundation,libgdx,objectal,Ios,Xamarin.ios,Avfoundation,Libgdx,Objectal,我目前正在用libGDX开发一个小型多平台游戏。这个游戏在Windows、Android和OSX上运行得很好,但我不能让它为iOS编译 美国政府提出了一些警告,但我很肯定我已经考虑到了一切。我有Eclipse、Xamarin.iOS、JDK、Ant和$PATH,$IKVM_HOME已经设置好了。gamename.dll(包含我所有游戏逻辑的Mono编译dll,由Java代码自动生成)已经创建,看起来一切正常 但是,在编译时,我收到以下错误消息: Error MT5201: Native link

我目前正在用libGDX开发一个小型多平台游戏。这个游戏在Windows、Android和OSX上运行得很好,但我不能让它为iOS编译

美国政府提出了一些警告,但我很肯定我已经考虑到了一切。我有Eclipse、Xamarin.iOS、JDK、Ant和$PATH,$IKVM_HOME已经设置好了。gamename.dll(包含我所有游戏逻辑的Mono编译dll,由Java代码自动生成)已经创建,看起来一切正常

但是,在编译时,我收到以下错误消息:

Error MT5201: Native linking failed. Please review user flags provided to gcc: "-L/Users/blah/Ultralyd/Ultralyd-ios/libs/ios" "-L/Users/blah/Ultralyd/Ultralyd-ios/libs/ios/ikvm/bin" "-likvm-natives" "-lgdx" "-force_load" "/Users/blah/Ultralyd/Ultralyd-ios/libs/ios/libgdx.a" "-force_load" "/Users/blah/Ultralyd/Ultralyd-ios/libs/ios/ikvm/bin/libikvm-natives.a" (MT5201)
(为了简洁起见,路径略为缩写。)

这些参数在创建iOS项目时由libGDX自动生成,在Xamarin的项目设置中如下所示:

-nosymbolstrip -nostrip -cxx -gcc_flags "-L${ProjectDir}/libs/ios -L${ProjectDir}/libs/ios/ikvm/bin -likvm-natives -lgdx -force_load ${ProjectDir}/libs/ios/libgdx.a -force_load ${ProjectDir}/libs/ios/ikvm/bin/libikvm-natives.a"
生成输出包含以下内容:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/g++  -Wl,-no_pie -arch i386 -gdwarf-2 -fobjc-legacy-dispatch -fobjc-abi-version=2 -miphoneos-version-min=3.2 -arch i386 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.1.sdk  /Users/erlenddahl/Copy/UltralydDebugging/Libgdx/Ultralyd/Ultralyd-ios/obj/iPhoneSimulator/Debug/mtouch-cache/main.i386.cache.vqL1439yU4Eq3JVRLyBeXkLz910=.o -o /var/folders/4p/g1k6g_v51kn35jm5yyh3g74m0000gq/T/tmp1da69439.tmp/iosgame -framework CFNetwork -framework Foundation -framework OpenGLES -framework UIKit -framework AVFoundation -framework QuartzCore -framework CoreGraphics -framework OpenAL -framework AudioToolbox -lz -liconv -u _mono_pmip -u _monotouch_create_managed_ref -u _monotouch_release_managed_ref -u _monotouch_IntPtr_objc_msgSend_IntPtr -u _monotouch_IntPtr_objc_msgSendSuper_IntPtr -u _CloseZStream -u _CreateZStream -u _Flush -u _ReadZStream -u _WriteZStream -lmono-2.0 -lmonotouch-debug -L/Developer/MonoTouch/SDKs/MonoTouch.iphonesimulator.sdk/usr/lib -u _catch_exception_raise  -force_load /var/folders/4p/g1k6g_v51kn35jm5yyh3g74m0000gq/T/tmp1da69439.tmp/libObjectAL-universal.a "-L/Users/erlenddahl/Copy/UltralydDebugging/Libgdx/Ultralyd/Ultralyd-ios/libs/ios" "-L/Users/erlenddahl/Copy/UltralydDebugging/Libgdx/Ultralyd/Ultralyd-ios/libs/ios/ikvm/bin" "-likvm-natives" "-lgdx" "-force_load" "/Users/erlenddahl/Copy/UltralydDebugging/Libgdx/Ultralyd/Ultralyd-ios/libs/ios/libgdx.a" "-force_load" "/Users/erlenddahl/Copy/UltralydDebugging/Libgdx/Ultralyd/Ultralyd-ios/libs/ios/ikvm/bin/libikvm-natives.a"
Process exited with code 1, command:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/g++  -Wl,-no_pie -arch i386 -gdwarf-2 -fobjc-legacy-dispatch -fobjc-abi-version=2 -miphoneos-version-min=3.2 -arch i386 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.1.sdk  /Users/erlenddahl/Copy/UltralydDebugging/Libgdx/Ultralyd/Ultralyd-ios/obj/iPhoneSimulator/Debug/mtouch-cache/main.i386.cache.vqL1439yU4Eq3JVRLyBeXkLz910=.o -o /var/folders/4p/g1k6g_v51kn35jm5yyh3g74m0000gq/T/tmp1da69439.tmp/iosgame -framework CFNetwork -framework Foundation -framework OpenGLES -framework UIKit -framework AVFoundation -framework QuartzCore -framework CoreGraphics -framework OpenAL -framework AudioToolbox -lz -liconv -u _mono_pmip -u _monotouch_create_managed_ref -u _monotouch_release_managed_ref -u _monotouch_IntPtr_objc_msgSend_IntPtr -u _monotouch_IntPtr_objc_msgSendSuper_IntPtr -u _CloseZStream -u _CreateZStream -u _Flush -u _ReadZStream -u _WriteZStream -lmono-2.0 -lmonotouch-debug -L/Developer/MonoTouch/SDKs/MonoTouch.iphonesimulator.sdk/usr/lib -u _catch_exception_raise  -force_load /var/folders/4p/g1k6g_v51kn35jm5yyh3g74m0000gq/T/tmp1da69439.tmp/libObjectAL-universal.a "-L/Users/erlenddahl/Copy/UltralydDebugging/Libgdx/Ultralyd/Ultralyd-ios/libs/ios" "-L/Users/erlenddahl/Copy/UltralydDebugging/Libgdx/Ultralyd/Ultralyd-ios/libs/ios/ikvm/bin" "-likvm-natives" "-lgdx" "-force_load" "/Users/erlenddahl/Copy/UltralydDebugging/Libgdx/Ultralyd/Ultralyd-ios/libs/ios/libgdx.a" "-force_load" "/Users/erlenddahl/Copy/UltralydDebugging/Libgdx/Ultralyd/Ultralyd-ios/libs/ios/ikvm/bin/libikvm-natives.a"
Undefined symbols for architecture i386:
  "_AVAudioSessionInterruptionNotification", referenced from:
      -[OALAudioSession init] in libObjectAL-universal.a(OALAudioSession.o)
  "_AVAudioSessionInterruptionTypeKey", referenced from:
      -[OALAudioSession handleInterruption:] in libObjectAL-universal.a(OALAudioSession.o)
  "_AVAudioSessionInterruptionOptionKey", referenced from:
      -[OALAudioSession handleInterruption:] in libObjectAL-universal.a(OALAudioSession.o)
ld: symbol(s) not found for architecture i386
collect2: ld returned 1 exit status
libObjectAL是libGDX在创建项目时自动添加的引用DLL之一

我想这意味着我的设置有问题,但我找不到任何与之相关的东西

有什么想法吗

编辑:在添加poupou建议的框架后,我现在收到一条稍微不同的错误消息: EDIT1b:不,实际上是一样的。唯一的区别是参数

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/g++  -Wl,-no_pie -arch i386 -gdwarf-2 -fobjc-legacy-dispatch -fobjc-abi-version=2 -miphoneos-version-min=3.2 -arch i386 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.1.sdk  /Users/erlenddahl/Copy/UltralydDebugging/Libgdx/Ultralyd/Ultralyd-ios/obj/iPhoneSimulator/Debug/mtouch-cache/main.i386.cache.1rmDllI2qRyDYwNzBd+9+oPccNg=.o -o /var/folders/4p/g1k6g_v51kn35jm5yyh3g74m0000gq/T/tmp141160e6.tmp/iosgame -framework CFNetwork -framework Foundation -framework OpenGLES -framework UIKit -framework AVFoundation -framework QuartzCore -framework CoreGraphics -framework OpenAL -framework AudioToolbox -lz -liconv -u _mono_pmip -u _monotouch_create_managed_ref -u _monotouch_release_managed_ref -u _monotouch_IntPtr_objc_msgSend_IntPtr -u _monotouch_IntPtr_objc_msgSendSuper_IntPtr -u _CloseZStream -u _CreateZStream -u _Flush -u _ReadZStream -u _WriteZStream -lmono-2.0 -lmonotouch-debug -L/Developer/MonoTouch/SDKs/MonoTouch.iphonesimulator.sdk/usr/lib -u _catch_exception_raise  -force_load /var/folders/4p/g1k6g_v51kn35jm5yyh3g74m0000gq/T/tmp141160e6.tmp/libObjectAL-universal.a "-framework" "AVFoundation" "-L/Users/erlenddahl/Copy/UltralydDebugging/Libgdx/Ultralyd/Ultralyd-ios/libs/ios" "-L/Users/erlenddahl/Copy/UltralydDebugging/Libgdx/Ultralyd/Ultralyd-ios/libs/ios/ikvm/bin" "-likvm-natives" "-lgdx" "-force_load" "/Users/erlenddahl/Copy/UltralydDebugging/Libgdx/Ultralyd/Ultralyd-ios/libs/ios/libgdx.a" "-force_load" "/Users/erlenddahl/Copy/UltralydDebugging/Libgdx/Ultralyd/Ultralyd-ios/libs/ios/ikvm/bin/libikvm-natives.a"
Undefined symbols for architecture i386:
  "_AVAudioSessionInterruptionNotification", referenced from:
      -[OALAudioSession init] in libObjectAL-universal.a(OALAudioSession.o)
  "_AVAudioSessionInterruptionTypeKey", referenced from:
      -[OALAudioSession handleInterruption:] in libObjectAL-universal.a(OALAudioSession.o)
  "_AVAudioSessionInterruptionOptionKey", referenced from:
      -[OALAudioSession handleInterruption:] in libObjectAL-universal.a(OALAudioSession.o)
ld: symbol(s) not found for architecture i386
collect2: ld returned 1 exit status

error MT5201: Native linking failed. Please review user flags provided to gcc: "-framework" "AVFoundation" "-L/Users/erlenddahl/Copy/UltralydDebugging/Libgdx/Ultralyd/Ultralyd-ios/libs/ios" "-L/Users/erlenddahl/Copy/UltralydDebugging/Libgdx/Ultralyd/Ultralyd-ios/libs/ios/ikvm/bin" "-likvm-natives" "-lgdx" "-force_load" "/Users/erlenddahl/Copy/UltralydDebugging/Libgdx/Ultralyd/Ultralyd-ios/libs/ios/libgdx.a" "-force_load" "/Users/erlenddahl/Copy/UltralydDebugging/Libgdx/Ultralyd/Ultralyd-ios/libs/ios/ikvm/bin/libikvm-natives.a"

您的一个本机库(日志中的
libObjectAL
)需要将AVFoundation框架链接到您的应用程序

注意:您可以从未找到的类型的
\u AV*
前缀中猜到这一点


解决方案:将
-framework AVFoundation
添加到您的
-gcc_标志
中,并重建您的应用程序。

因此需要
-framework AVFoundation
,至少在您的应用程序未引用
MonoTouch.AVFoundation
中的类型的情况下。在以后的情况下,框架将自动链接

这三个符号还有一个共同点:它们在iOS6中都是新的

它将我们的you building与iOS 5.1进行对比,即

-isysroot/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.1.sdk

因此符号不存在(在引用的
AVFoundation.framework
中),并且您的
libObjectAL universal.a
对缺少的符号不满意

在这里,您有两个选择:

  • 将您的最低构建版本设置为iOS6(它已经拥有93%的市场份额)

  • 尝试查找(或构建)一个不依赖ios6api的
    libObjectAL


  • 谢谢,这可能是朝着正确的方向迈出的一步,但我现在看到的是“i686-apple-darwin11-llvm-g++-4.2:AVFoundation:没有这样的文件或目录”。我假设这意味着我需要在Xamarin解决方案中的某个地方包含AVFoundation,但我不知道它在哪里,也不知道如何添加它。它必须位于您的
    -gcc_标志
    中,因为它是您给本机(Apple)链接器的指令。我打错了一个字(固定的),应该是
    -framework-AVFoundation
    ,而不是
    -framework-AVFoundation
    (只有一个
    -
    )。谢谢,但似乎没什么区别,请看我在原始帖子中的编辑。错误消息似乎相同,但我可以看到“-framework”“AVFoundation”现在添加到第一行的末尾。但是,请注意,该框架似乎已经包含在内(如果您水平滚动到中心前一点,“-framework AVFoundation”已经存在,以及许多其他框架)。您可以粘贴完整的构建日志(并添加链接)吗?是的,这里是:第一部分是构建monodll的libGDX脚本。(我相信直到最后一种“书写方法”)啊,谢谢!我很想设置我的最低版本,但我只能找到5.1。是否有我没有正确安装的东西?在Options=>iOS Build=>SDK版本中,我只有两个选项:“5.1”和“Default”。在iOS Application=>Deployment Target中,我有很多版本,但没有一个版本高于5.1。3.2当前已选定。在build下拉列表中,我可以选择“ipadsimulator5.1”或“iphonesimulator5.1”,6.1中没有。我有XCode版本4.3.2和Xamarin版本4.0.8b2。我遗漏了什么明显的东西吗?那是因为您的Xcode版本(包括iOS SDK)太旧了(它是在6.0可用之前发布的)。您需要将其更新为4.5(或4.6)才能获得iOS 6(或6.1)SDK支持。是的,这解决了问题。非常感谢你!(很抱歉,我花了这么长时间才检查您的答案——这是一个公司的Mac,所以很自然,我花了整整四天的时间才获得更新Xcode所需的权限。)