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



我能够成功地为我的Objective-C静态库创建dll文件。但当我试图从Xamarin.iOS应用程序中引用dll并进行编译时,它会给我很多错误,比如。。。

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

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

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


之后,我尝试使用Addional mtouch Arguments链接我的.a库。在添加了这些论点之后,我得到了新的错误。

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

有人能帮我解决这个问题吗。

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

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

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

希望即使这不太奏效,它也能让你朝着正确的方向前进。

终于发现了错误!!

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

在iOS绑定Projet

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

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

在我的演示应用程序中

选项>iOS Buidl>附加mtouch参数

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

通过在所有地方悬挂合适的旗帜,它解决了我的问题。

我在安装新版本的Xcode时解决了这个问题。(现在是7.1)这个错误有误导性,但现在它起作用了!

最新更新