我需要一些帮助来在XCode中包装C ++库。
我想要实现的是在XCode中创建新库,导入C ++库(我有.a和.h文件),将其包装到Obj-C,这样我就可以将该库导入MonoTouch。
我之所以这样做是因为当我尝试将C ++ lib导入MonoTouch时,由于名称损坏,我不断收到WrongEntryPoint异常。如果我错了,请纠正我,但我无法找到受损的名字,这取决于编译器。
提前谢谢
答案 0 :(得分:2)
如果我错了,请纠正我,但我无法找到受损的名字,这取决于编译器。
技术上你可以。许多编译器共享相同的mangling syntax,也许是安腾最有用和最持久的礼物;-)
然而,当您更新C ++代码时,它会带来它自己的痛苦(例如非原始类型,其他编译器)和维护问题。
你会更好地服务于:
编写 ObjectiveC 包装并使用MonoTouch的 btouch 工具生成绑定;
编写 C 包装并使用.NET p / invoke调用代码;
您的选择,但如果您考虑在其他地方重用C ++ / C#代码(例如Android的Mono),那么使用 C 和p / invoke将是可重用的。
答案 1 :(得分: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
我还建议,如果您打算使用Obj-C包装器的路径,那么您将获得输出代码并将其包含在您的项目中,而不是包含来自btouch的dll。根据我的经验,代码比dll工作更可靠,尽管dll的问题现在可能已经解决了。但请看一下有关btouch问题的这个问题:
如果您在构建Obj-C包装器时遇到特定问题/问题,请在此处询问并发布一些代码,我相信我或社区的其他成员可以帮助您。
答案 2 :(得分:1)
Bruce,正如您所假设的,我在包装C ++代码时遇到了问题。经过几个小时的阅读和尝试,我无法包装C ++代码。
无论如何,我设法创建了一个由一些虚拟类组成的简单Obj-C库,然后将其导入另一个库。这工作得很好。但是,按照相同的模式,我包含C ++ .a文件和.h文件(我不确定.h是否必须,因为我们可以在构建选项中链接头文件,对吧?)当我编译它时,它去了很好,构建成功,但XCode没有生成新的.a库。
我添加了链接器标志:-ObjC -lNameOfLib 构建中的C ++标准库类型 - 链接必须是静态的吗?和默认隐藏的符号一样?
如果我们可以一步一步地写出啧啧,那将是很好的,因为有大量的各种指令,但我还没有把它推到最后。
我有点困惑......
谢谢你们......