你能把一个C ++ Linux针对性的应用程序链接到一个Objective-C静态库吗?

我已经看到了很多关于如何将一个Objective-C应用程序链接到C ++库的信息,但是你可以用相反的方法做到吗?

我的合作伙伴和我一直在使用Objective-C来开发iPhone应用程序。 通过项目的一半,我们决定添加一个新的function。 此function需要推送通知,所以我们需要编写将在Linux机器上运行的服务器端应用程序。 这个服务器应用程序需要访问一些(大部分,实际上)用Objective-C编写的代码。 我想我们有两个select:用C / C ++重新编写整个东西,或者在Linux上重新编译Objective-C代码。 由于重写时间太长,我想采取第二条路线。

我设法使用GCC和GNUstep将我们需要的linux服务器应用程序所需的Objective-C类编译成一个静态库。 我想用C ++编写实际的服务器应用程序,但我需要将该应用程序链接到Objective-C库。 可以这样做吗? 怎么样?

如果没有,任何人都可以给我一个如何去做这个想法?

    您的Linux机器上的Gcc应该能够与标准基础类(如NSStringNSArray一起编译Objective-C。 您可能需要将前端apt-get到gcc。 甚至更好的使用LLVM。

    只要你不在你的共享代码中使用苹果库,你应该可以在Linux上编译它。

    如果要从C或C ++应用程序中调用它们,必须将您的Objective-C功能包装到C函数中。 我在这个问题的答案中提供了一些指导: 是否有任何方法可以在C中使用Objective-C库? 。

    编辑 🙁 回答评论的问题)

    包装函数必须是.m文件,并用Objective-C编译器进行编译,因为它仍然包含Objective-C代码,只是公开纯C函数。 这与C ++包装的C ++代码一样,仍然需要成为一个C ++代码 – 只是定义了extern "C"函数。 在Objective-C中,你不需要extern "C"因为Objective-C仍然是C – 相同的链接等等。

    您可以在符合GCC的编译器中使用带有简单-l标志的结果库。

    通过苹果库,我的意思是超过NSFoundation.h – 特定的iPhone库 – 比如CocoaTouch

    NSFoundation.h肯定是由你的Objective-C包/ GNUStep提供的。