【问题标题】:Create binding for 2 dependent static libraries in Xamarin.iOS在 Xamarin.iOS 中为 2 个依赖静态库创建绑定
【发布时间】: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 进行正确的绑定?

【问题讨论】:

    标签: c# ios binding xamarin.ios xamarin


    【解决方案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 文件之一引用了第二个文件? (我的意思是,在本地级别)。
    猜你喜欢
    • 2018-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-28
    • 2010-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多