【问题标题】:Wrapping C++ library in XCode在 XCode 中包装 C++ 库
【发布时间】:2011-09-16 20:43:27
【问题描述】:

我需要一些关于在 XCode 中包装 C++ 库的帮助。

我想要实现的是在 XCode 中创建新库,导入 C++ 库(我有 .a 和 .h 文件),将其包装到 Obj-C 以便我可以将该库导入 MonoTouch。

我这样做的原因是当我尝试将 C++ lib 导入 MonoTouch 时,由于名称修改,我不断收到 WrongEntryPoint 异常。如果我错了,请纠正我,但我无法找出错误的名称,这取决于编译器。

提前谢谢你

【问题讨论】:

    标签: c++ objective-c xcode xamarin.ios


    【解决方案1】:

    如果我错了,请纠正我,但我无法找出错误的名称,这取决于编译器。

    技术上你可以。许多编译器共享相同的mangling syntax,这可能是来自安腾的最有用和最持久的礼物;-)

    但是,当您更新 C++ 代码时,它会带来自己的痛苦(例如非原始类型、其他编译器)和维护问题。

    您最好通过以下方式为您服务:

    • 编写 ObjectiveC 包装器并使用 MonoTouch 的 btouch 工具生成绑定;

    • 编写 C 包装器并使用 .NET p/invoke 调用您的代码;

    这是您的选择,但如果您考虑在其他地方重用 C++/C# 代码(例如 Android 的 Mono),那么使用 C 和 p/invoke 将是可重用的。

    【讨论】:

      【解决方案2】:

      我肯定会推荐将库包装在 Obj-C 库中并使用 btouch 将库导入 MonoTouch 的路线。我最近为一个实现了 Sybase 数据库引擎的 C++ 库做了这个。如果您查看我的问题,您会发现很多与包装 C++ 库有关的问题,因为我发布了几次关于我遇到的问题。

      具体可以看这些问题:

      Linking to a C++ native library in MonoTouch

      Wrapping a C++ library in Objective-C is not hiding the C++ symbols

      Application with static library runs on simulator but not on actual device

      Undefined symbols when linking PhoneGap static library in MonoTouch

      Linker options 'Link all assemblies" and "Link SDK assemblies only" causes undefined symbols in 3rd party static library

      如果您打算使用 Obj-C 包装器,我还建议您使用 btouch 输出代码并将其包含在您的项目中,而不是包含来自 btouch 的 dll。根据我的经验,代码比 dll 更可靠,尽管 dll 的问题现在可能已经解决。但是看看这个关于 btouch 问题的问题:

      Exception System.InvalidCastException when calling a method bound with btouch that returns an object. MonoTouch bug?

      如果您在构建 Obj-C 包装器时遇到特定问题/问题,请在此处提问并发布一些代码,我相信我或社区的其他成员能够帮助您。

      【讨论】:

        【解决方案3】:

        Bruce,如您所料,我在包装 C++ 代码时遇到了问题。经过数小时的阅读和尝试,我无法包装 C++ 代码。

        无论如何,我设法创建了一个由一些虚拟类组成的简单 Obj-C 库,然后将其导入另一个库。那工作得很好。但是,按照相同的模式,我包含了 C++ .a 文件和 .h 文件(我不确定 .h 是否是强制性的,因为我们可以在构建选项中链接头文件,对吧??)当我编译它时,它去了很好,构建成功了,但是 XCode 没有生成新的 .a 库。

        我添加了链接器标志:-ObjC -lNameOfLib 构建中的 C++ 标准库类型 - 链接必须是静态的吗?还有默认隐藏的符号?

        如果我们能一步一步地写就太好了,因为有很多不同的说明,但我一直没能坚持到底。​​p>

        我有点困惑..

        谢谢你们……

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-01-19
          • 1970-01-01
          • 2016-08-13
          • 1970-01-01
          • 1970-01-01
          • 2020-05-01
          • 1970-01-01
          相关资源
          最近更新 更多