Rob*_*bie 9 c++ xcode linker objective-c dylib
我正在编写一个图形应用程序,使用Objective-C作为前端,使用C++进行图形处理和网络通信.我在Apple的网站上阅读,寻找一种方法将.dylib或.so与我的C++代码链接到我的Xcode项目,但似乎没有任何效果.我能够让项目引用它并链接它,但当我试图从.dylib调用函数时,它说它不知道我想要做什么.有谁知道这里发生了什么?
我知道Objective-C有我需要做的图形和网络所有的库,但我只是觉得这样做.我有一段时间没有做太多的C++,我想学习更多的Objective-C,那么有什么比一起使用它们更好的方法呢?
谢谢,罗比
Rob*_*ier 15
我工作的大多数项目都有一个ObjC前端和C++后端.如果你只处理函数,那么Dave Gamble的名称修复是正确的,但是如果你正在处理更复杂的情况,你需要处理ObjC和C++对象,你最好的办法是包装C++对象在ObjC对象中.使用不透明引用(这是一种非常奇特的说法void*),您实际上可以在ObjC中处理C++对象,反之亦然.我有一些可能有用的示例代码.
也就是说,对于图形,你可能会在使用自定义C++而不是使用Core Image和相关框架时受到严重影响.Core Image和其他图形框架针对Mac进行了高度优化,使用手动C++(甚至是非常适合Mac的编写得很好的C++)也不太可能做得更好.当您转向10.6和大型中央调度时,性能差异将更加显着,因为您将失去所有免费获得的并行化进展.这与ObjC无关; Core Image是C.你可以用C++来调用它.我建议不要使用任何语言在Mac上进行自定义图形处理,除非您需要便携性或者您具备击败Core Image所需的专业知识.
Dav*_*ble 14
你将以所谓的"名称修改"的形式遇到一个障碍.C++以与Obj-C不兼容的方式存储函数名.
Objective-C没有像C++那样实现类,所以它不会喜欢它.
解决此问题的一种方法是实现一组调用C++函数的简单C函数.保持C函数的数量尽可能低是一个很好的挑战!你最终会得到一个漂亮的紧凑界面!:)
要在C++文件中声明这些函数,您需要将它们标记为C:
extern "C" int function_name(char *blob,int number, double foo) {...}
Run Code Online (Sandbox Code Playgroud)
这会禁用标准名称修改.
使用您可以与目标C代码共享的所有这些函数的原型构建头文件.
你将无法以相同的方式传递类(因为你的ObjC代码不能使用它们),但是你将能够传递指针(尽管你可能不得不对这些类型撒谎).
| 归档时间: |
|
| 查看次数: |
13215 次 |
| 最近记录: |