我计划编写一个开源库,它确实需要用面向对象的语言编写。一个问题是,库应该可以与C一起使用,在这里,直接包含源代码或(动态)链接到预编译库并不重要。
我知道这三个C++,C和目标-C。
Objective是C的一个超集(也就是说,每个C代码,甚至Linux内核,都应该能够被编译为Objective);因此,如果使用库的C应用程序被编译为Objective(当然,我可以在使用说明中包括这一点),它应该能工作。
C++不是C的超集,但它比Objective更受支持,而且比Objective更多的是C++程序员和编译器。
我该怎么办?
二进制文件是用C编写的,还是在编译为目标C时具有更低的性能?
发布于 2010-08-14 14:49:18
我觉得你把兼容性看错了。您不希望仅仅因为这个库就将您的其他代码编译为Objective。
如果您需要这个库在任何"C“平台上工作,那么C是唯一的方法。
其中许多平台也支持C++,所以从面向对象的角度来说,这将是一个很好的选择。
Objective在苹果以外的其他平台上并不常见,如果你开始使用一些特殊的框架,这可能会给你带来麻烦。
发布于 2010-08-14 14:56:42
如果您使用C++,您可能希望使接口“外部可见”(对于使用库的C应用程序)C兼容,例如将它们声明为
extern "C" {
...
}
并且不让库用户看到任何类等。
另一点:如果您计划让其他人为项目贡献(您说它是开源的),那么您将更有可能找到了解C++的贡献者,而不是了解目标C的贡献者。
发布于 2010-08-14 15:20:27
Obj编译在几乎所有方面都得到了支持,因为它是gcc的一部分.
然而,Obj和C++的最大区别在于,Obj还需要一个运行时库。这远没有得到广泛的支持,而且GnuStep版本落后于one。
Obj的动态特性使编写和编译跨平台代码在技术上更容易,但实际上,您需要确切了解不同目标环境支持哪些方法,因为编译器不会捕获它们。
此外,GnuStep、Cocotron和Etoile --这3种非Apple环境--只在Windows和Linux开发者中占据了一席之地。这将减少对OS开发人员和其他平台上极少数开发人员的占用。例如,Cocotron主要用于OS开发人员,他们正在寻找通往Windows的快速端口,而不是寻找一个好的x平台工具的开发人员。
另一种选择可以是看看苹果自己在macosforge ( CoreFoundation、WebKit、clang )上的开源努力,或者是操作系统的结构和其他采用现有代码并暴露在Obj中的第三方项目。
一个典型的模式是拥有一个核心C或C++项目,然后通过Obj公开该项目。
人们对C++和C也做了同样的工作--即编写OO C++代码,但随后通过接口级的过程包装器将其公开给C。如果您希望将代码链接到普通C中,则可能需要考虑这一点。
总之,除非用Obj编写可以简化设计,而且您的受众是OS /iOS开发人员,否则我建议使用C++ (您说库需要用OO语言编写),然后用Obj包装它。
如果它只适用于OS /iOS,我会选择Obj。
另一种选择可能是完全放弃C语言需求,而采用像Python或Ruby这样的可移植OO语言,那里有一个活跃的开源开发人员社区。
https://stackoverflow.com/questions/3483814
复制相似问题