将iOS静态库绑定到Xamarin.iOS并使用dll

时间:2013-12-21 04:46:11

标签: ios xamarin.ios static-libraries xamarin

我能够成功为我的Objective-C静态库创建dll文件。但是,当我尝试从Xamarin.iOS应用程序和编译中引用该dll时,它给了我很多错误,如...

  

错误MT5210:本机链接失败,未定义符号:_AudioFileClose。请验证是否已引用所有必需的框架,并且已正确链接本机库。(MT5210)

     

错误MT5210:本机链接失败,未定义的符号:std :: ios_base :: Init :: Init()。请验证是否已引用所有必需的框架,并且已正确链接本机库。(MT5210)

     

错误MT5202:本机链接失败。请查看构建日志。 (MT5202)


在此之后,我尝试使用Addtional mtouch Arguments链接我的.a库。添加这些参数后,我收到了新的错误。

  

无法解析命令行参数:无法捆绑未注册的选项'-o'。

有人可以帮我解决这个问题。

3 个答案:

答案 0 :(得分:7)

正如Stephane所提到的,LinkWithAttribute上有一个IsCxx属性,您可以设置该属性来指定.a库是一个c ++库。这将解决std::ios_base::Init::Init()错误。

要解决undefined symbol: _AudioFileClose错误,您可以尝试将CoreAudio或AudioToolbox框架添加到要链接的框架列表中:

[assembly: LinkWith (..., IsCxx = true, Frameworks = "CoreAudio AudioToolbox")]

希望即使这不起作用,也会让你朝着正确的方向前进。

答案 1 :(得分:4)

终于找到了错误!!

    [assembly: LinkWith (..., IsCxx = true, Frameworks = "CoreAudio AudioToolbox", LinkerFlags = "-lstdc++ -lz" )]

在iOS Binding Projet中

选项>构建>编译器>加法参数

    -cxx -gcc_flags "-stdlib=libstdc++ -L${ProjectDir} -lMylibrary -force_load ${ProjectDir}/libMylibrary.a”

在我的演示应用程序中

选项> iOS Buidl> Addtional mtouch Arguments

    --gcc_flags="-stdlib=libstdc++"

通过在所有地方提供适当的标志,它解决了我的问题。

答案 2 :(得分:0)

我解决了安装新版Xcode的问题。 (现7.1) 该错误具有误导性,但现在可行了!