在 Xamarin.iOS 中为 2 个依赖静态库创建绑定

Posted

技术标签:

【中文标题】在 Xamarin.iOS 中为 2 个依赖静态库创建绑定【英文标题】:Create binding for 2 dependent static libraries in Xamarin.iOS 【发布时间】:2014-06-21 00:24:00 【问题描述】:

我在 Xamarin.ios 上遇到了绑定问题。

我有 2 个库: 库A.a libB.a

而 libB.a 依赖于 libA.a 类。在 libA 我有这个类:

namespace ABC 
    [BaseType (typeof (NSObject))]
    public partial interface ClassAbc 
        [Export ("setString:")]
        void SetString (string abc);
    

libB 我有这个代码:

namespace ABCUsage 
    [BaseType (typeof (NSObject))]
    public partial interface ClassAbcUsage 
        [Export ("setAbc:")]
        void SetAbc (ClassAbc abc);
    

我没有 libA.a 和 libB.a 的源代码,只有通用静态库和头文件。

我尝试添加 libA 绑定项目和最终 A.dll 作为 libB 绑定的参考,但它显示“找不到命名空间 ABC”。

我应该如何为 libB 进行正确的绑定?

【问题讨论】:

【参考方案1】:

您好,您可以在单个绑定项目中绑定任意数量的库,只需确保指定完全限定的类型名称

namespace ABC 
    [BaseType (typeof (NSObject))]
    public partial interface ClassAbc 
        [Export ("setString:")]
        void SetString (string abc);
    


namespace ABCUsage 
    [BaseType (typeof (NSObject))]
    public partial interface ClassAbcUsage 
        [Export ("setAbc:")]
        void SetAbc (ABC.ClassAbc abc);
                    //^^^^^
    

希望这会有所帮助。

【讨论】:

天啊!有用。我什至无法想象我可以在绑定项目中添加几个静态库。谢谢! @dalexsoto,这确实是一个很好的答案!但是,即使已经快 5 年了,大声笑你能不能回答一下这两个库连接的应用程序流程是什么?我的意思是,如果我们从库 1 中调用一些代码,这需要从库 2(从其本机代码)访问一些方法,那么这一切将如何工作?... @Agat 它应该像静态库一样工作,因为本机链接器应该解决这个问题并保留对象,除非本机库动态解析内容。当然 bot 原生静态库应该添加到同一个绑定项目中。 @dalexsoto,这两个静态库都是由 Sharpie 从 *.framework 转换而来的。所以,好像没事吧?但是我要明确说明的是:我可以将两个 *.a 文件添加到一个 Binding 项目中,并且构建器(链接器)会自己弄清楚一切吗?我的意思是,如果 *.a 文件之一引用了第二个文件? (我的意思是,在本地级别)。

以上是关于在 Xamarin.iOS 中为 2 个依赖静态库创建绑定的主要内容,如果未能解决你的问题,请参考以下文章

如何在 binding.gyp node-gyp 中为 node.js 扩展添加对静态库的依赖

CLLocation 在我的 xamarin.ios 项目中为 Null

Xamarin.iOS CocoaPods基本使用

如何加载存在于 Xamarin.iOS 中的共享库项目中的第二个 Storyboard

Xamarin iOS Binding 项目似乎不包含库或接口定义

如何在 VSTS 中为 Xamarin iOS 和 Android 部署添加快速通道工具