你能链接一个C++;Linux目标应用程序到Objective-C静态库? 我已经看到了大量关于如何将Objto-C应用程序链接到C++库的信息,但是你能做另一种方法吗?< /P>

你能链接一个C++;Linux目标应用程序到Objective-C静态库? 我已经看到了大量关于如何将Objto-C应用程序链接到C++库的信息,但是你能做另一种方法吗?< /P>,c++,objective-c,linux,static-libraries,apple-push-notifications,C++,Objective C,Linux,Static Libraries,Apple Push Notifications,我和我的合作伙伴一直在使用Objective-C开发iPhone应用程序。项目进行到一半时,我们决定为其添加一项新功能。此功能需要推送通知,因此我们需要编写将在Linux机器上运行的服务器端应用程序。这个服务器应用程序需要访问一些(实际上是大多数)用Objective-C编写的代码。我想我们有两个选择:用C/C++重新编写整个程序,或者在Linux上重新编译Objective-C代码。由于重写会花费太长时间,我想走第二条路 我设法使用GCC和GNUstep将linux服务器应用程序所需的Obje

我和我的合作伙伴一直在使用Objective-C开发iPhone应用程序。项目进行到一半时,我们决定为其添加一项新功能。此功能需要推送通知,因此我们需要编写将在Linux机器上运行的服务器端应用程序。这个服务器应用程序需要访问一些(实际上是大多数)用Objective-C编写的代码。我想我们有两个选择:用C/C++重新编写整个程序,或者在Linux上重新编译Objective-C代码。由于重写会花费太长时间,我想走第二条路

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


如果没有,有人能告诉我怎么做吗

> Pc> Linux上的GCC应该能够编译ObjtoE-C和标准的基础类,如<代码> NScord或<代码> NSArray < /代码>。您可能需要
apt获取gcc的前端。或者更好地使用LLVM

只要在共享代码中不使用Apple库,就可以在Linux上编译它

如果你想从C或C++应用程序调用它们,你必须把你的ObjuleC功能包打包成C函数。我在回答这个问题时提供了一些指导:

编辑:(回答评论的问题)

包装函数必须是.m文件,并使用Objective-C编译器进行编译,因为它仍然包含Objective-C代码,并且只公开普通的.C函数。它与C++的API一样强,> C API <强>包装器仍然需要是C++代码——只需定义<代码>外部“C”< /C>函数。在Objective-C中,您需要
外部“C”
,因为Objective-C仍然是C-相同的链接,等等

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

所谓苹果库,我指的不仅仅是
NSFoundation.h
——特定的iPhone库——比如CoCoTouch


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

我认为您基本上需要将调用放入
.m
文件中,并调用您在其中定义的任何C函数?@MichaelKrelin hacker您的意思可能是
.mm
?不管怎样,您的意思是,服务器端linux应用程序的所有源文件都必须由GCC Objective-C前端编译?我不能将我的文件命名为
something.cpp
并将它们链接到Objective-C库(
-lMyObjCLib
)?
.m
应该可以。不,我认为您可以从
.c
.cc
(或
.cpp
)文件调用
.m
文件中定义的普通
c
函数。它只是接口部分,应该是
.m
。谢谢,这似乎正是我需要的。但我想我需要更多的细节。包含包装函数实现的源文件必须是.m,对吗?并由GCC/Linux编译为Objective-C静态库?那么我的C/C++应用程序将如何链接到该库?正常的
-l
链接器选项?还有,“苹果图书馆”是指基金会。再次感谢你,我有点不知所措,但我开始了解这是如何做到的。@DaniloCarvalho-刚刚更新了我的答案以反映你的问题。如果你喜欢的话,别忘了投票并接受答案。太好了!我会试试的,对我来说很有意义,所以它应该会起作用。非常感谢你。