Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在web服务器上运行Objective-C二进制文件?_Objective C_Gnustep_Cocotron - Fatal编程技术网

如何在web服务器上运行Objective-C二进制文件?

如何在web服务器上运行Objective-C二进制文件?,objective-c,gnustep,cocotron,Objective C,Gnustep,Cocotron,好吧,我有一个很奇怪的问题。与其他语言相比,我觉得用Objective-C编写代码要舒服得多。我最近不得不做一些服务器端编程,这需要我学习PHP。是的,但是,为了好玩,我想通过Objtovi.C来实现同样的事情。所以,我用XCODEE的基础预设创建了一个二进制。以下是大部分二进制文件: #import <Foundation/Foundation.h> #import "JSONKit.h" int main (int argc, const char * argv[]) {

好吧,我有一个很奇怪的问题。与其他语言相比,我觉得用Objective-C编写代码要舒服得多。我最近不得不做一些服务器端编程,这需要我学习PHP。是的,但是,为了好玩,我想通过Objtovi.C来实现同样的事情。所以,我用XCODEE的基础预设创建了一个二进制。以下是大部分二进制文件:

#import <Foundation/Foundation.h>
#import "JSONKit.h"

int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    NSString *theURL = [NSString stringWithFormat:@"http://blahblahblah.com/blah"];
    NSError *err = nil;
    NSURLResponse* response = nil;
    NSMutableURLRequest* request = [[[NSMutableURLRequest alloc] init] autorelease];
    NSURL*URL = [NSURL URLWithString:theURL];
    [request setURL:URL];
    [request setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
    [request setTimeoutInterval:30];
    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err];
    NSDictionary *someData = [data objectFromJSONData];
    NSString *someString = [[someData objectForKey:@"foo"]objectForKey:@"bar"];
    //do something

    [pool drain];
    return 0;
} 
#导入
#导入“JSONKit.h”
int main(int argc,const char*argv[]{
NSAutoreleasePool*池=[[NSAutoreleasePool alloc]init];
NSString*URL=[NSString stringWithFormat:@]http://blahblahblah.com/blah"];
n错误*err=nil;
NSURLResponse*response=nil;
NSMutableURLRequest*请求=[[[NSMutableURLRequest alloc]init]autorelease];
NSURL*URL=[NSURL-URLWithString:theURL];
[请求设置URL:URL];
[请求设置缓存策略:NSURLRequestReloadIgnoringLocalCacheData];
[请求setTimeoutInterval:30];
NSData*data=[NSURLConnection sendSynchronousRequest:请求返回应答:&响应错误:&错误];
NSDictionary*someData=[data objectFromJSONData];
NSString*someString=[[someData objectForKey:@“foo”]objectForKey:@“bar”];
//做点什么
[泳池排水沟];
返回0;
} 

相当基本的代码。它只是从我的服务器下载一些东西,我解析JSON结果并得到一个我想要使用的字符串。所以,我的问题是-我如何在基于Linux的服务器上运行它?我知道这是可能的,也许使用GNUStep(或cocotron?),但我不知道如何使用。有人有想法吗

尝试时出现了什么问题?您应该能够使用。您应该能够运行它。

您要查看的内容称为。它是一种协议,用于说明web服务器与从属进程交互的方式

当用户浏览到映射到您的程序的URL时,服务器将启动您的程序,并将请求文本放入STDIN。您的程序将执行所需的任何处理,然后将结果(以及一些标题信息)放入标准输出。

好, 我的建议与@lacqui相同。。使用CGI运行您的程序。。下面是步骤

(旁注:不推荐使用
CGI
,因为每次请求到达服务器时它都会启动一个进程(现代服务器/web容器会启动一个新的
线程
(vs
进程

那么,让我们开始:

  • 手边的输入是一个用Objectiv-c编写的程序
  • 输出是一个CGI脚本(程序或任何他们命名的程序),该脚本 将在某个http服务器中运行
首先,让我问一下,部署应用程序的目标平台是什么

  • 如果目标部署平台是Mac,那么您必须从xcode中获取二进制文件(我认为它应该是.dmg格式),并找到如何在web服务器中以CGI程序的形式运行
    .dmg
    (我不确定apache是否在Mac下运行)

  • 但如果它是
    Windows
    Linux

  • 您将需要使用GNUstep编译您的应用程序(我对从Xcode到GNUstep的可移植性一无所知),您将需要一个GNUstep
  • 一旦安装了GNUstep,您将不得不再次使用它编译您的应用程序,请参考上面相同的两个链接以了解如何编译您的应用程序
  • 这里的问题是,AFAIK、GNUstep不完全支持Objc-2,因此编译失败的可能性很高,因为使用了
    JSONKit.h
    。如果您的程序编译成功,那么您就差不多完成了
  • 假设您的程序已编译,并且您现在有了二进制程序。您需要将其部署在启用了
    CGI
    HTTP
    服务器中。(它应适用于任何二进制程序,无论其源语言如何)

关于架构x86_64的未定义符号,我遇到了很多错误。我假设您的意思是这样做?
gcc main.m-o someexec
当您看到哪些符号未定义时,您可以跟踪包含它们的适当库(可能是GNUStep)我还没有安装GNUStep。即使我在Mac上,我也应该这样做吗?我以为这个问题是关于基于Linux的服务器的。硬件是谁制造的无关紧要。哦,对不起。我说的是在我的计算机上编译它,然后将生成的二进制文件上载到我的服务器。这不是你的建议吗?我很困惑。这不是ac实际上,我的意思是为用户做任何事情。这只是一个脚本,它将在我的服务器上默默运行,执行特定的进程。我只是无法在我的服务器上运行它。非常感谢您提供了详细的步骤。我会在有机会时查看它。我只是想澄清一下,我正在Mac上编译此应用程序,并部署到Linux服务器上。