繁体   English   中英

在XCode中包装C ++库

[英]Wrapping C++ library in XCode

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

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

之所以这样做,是因为当我尝试将C ++ lib导入MonoTouch时,由于名称处理问题,我不断收到WrongEntryPoint异常。 如果我错了,请纠正我,但是我找不到找出乱码的名称,这取决于编译器。

先感谢您

如果我错了,请纠正我,但是我找不到找出乱码的名称,这取决于编译器。

从技术上讲,您可以。 许多编译器共享相同的处理语法 ,也许是Itanium提供的最有用和最持久的礼物;-)

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

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

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

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

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

我绝对建议您将库包装在Obj-C库中,然后使用btouch将库导入MonoTouch。 我最近对实现Sybase数据库引擎的C ++库进行了此操作。 如果您看一下我的问题,在我就遇到的问题发表过几次之后,您会发现很多与包装C ++库有关的问题。

具体来说,您可以查看以下问题:

链接到MonoTouch中的C ++本机库

在Objective-C中包装C ++库不会隐藏C ++符号

带有静态库的应用程序在模拟器上运行,但不在实际设备上运行

在MonoTouch中链接PhoneGap静态库时的未定义符号

链接器选项“仅链接所有程序集”和“仅链接SDK程序集”会导致第三方静态库中的未定义符号

我还将建议,如果您打算采用Obj-C包装程序的方法,则可以让btouch输出代码并将其包含在项目中,而不是包含来自btouch的dll。 根据我的经验,尽管dll的问题现在可能已经解决了,但是代码比dll更可靠地工作。 但是,请看一下有关btouch问题的问题:

调用与btouch绑定的方法返回对象时,异常System.InvalidCastException。 MonoTouch错误?

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

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

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

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

如果我们可以编写循序渐进的教程,那就太好了,因为有大量的各种指令,但是我一直无法将它推到最后。

我有点困惑。

感谢大伙们...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM