将标准库与 Xamarin 链接

Linking stdlibs with Xamarin

我用 Xamarin 创建了一个简单的绑定项目。绑定项目导入静态库MyLibrary.a。它还包含通过 sharpie 工具制作的 ApiDefinition.csStructAndEnum.cs

现在我有一个链接该绑定项目的 iOS 项目。 MyLibrary.a 为了工作需要一些框架和库(见下文)。

为了让它工作,我遵循了Xamarin documentation

在 iOS 项目中,我添加了以下内容 mtouch arguments (另请参阅附件图像)。

--cxx -gcc_flags "-L${ProjectDir} -framework CFNetwork -framework SystemConfiguration -framework MobileCoreServices -framework Security -framework AVFoundation -libicucore -libxml2 -libc++ -libzd -libstdc++.6.0.9"

当我尝试编译时,我总是以构建错误结束。

MTOUCH: error MT5209: Native linking error: library not found for -libicucore MTOUCH: error MT5201: Native linking failed. Please review the build log and the user flags provided to gcc: -L/Users/tmp/Documents/Projects/Ovp/BindinTest.iOS -framework CFNetwork -framework SystemConfiguration -framework MobileCoreServices -framework Security -framework AVFoundation -libicucore -libxml2 -libc++ -libzd -libstdc++.6.0.9 MTOUCH: error MT5202: Native linking failed. Please review the build log.

有什么线索可以让它发挥作用吗?也许缺少什么?

提前谢谢你。

-libicucore -libxml2 -libc++ -libzd -libstdc++.6.0.9

这不是您为 gcc linkage 传递库选项的方式。

到link静态或动态库libicucore.<extension> 驻留在 /path/to/the/lib 中,命令行选项是:

-L/path/to/the/lib -licucore

注意省略了库名的lib前缀 -l 选项:linker 假设它。如果 /path/to/the/lib 是 linker 之一 库的默认搜索目录然后你可以省略它。如果你有 再看看您的 Xamarin 文档,您会看到 libMyLibrary.a 使用选项 -lMyLibrary 编辑 link。

关于这些 linkage 选项的一些其他事情在我的 GCC 眼中似乎很奇怪, 但由于我对 iOS 的开发几乎一无所知,所以我不会预料到 你还没有遇到的问题。