Objective c Can';t执行用GNUstep编译的程序

Objective c Can';t执行用GNUstep编译的程序,objective-c,windows,gnustep,Objective C,Windows,Gnustep,我正在运行Windows10,带有GNUstep。我一直试图将我的AI.m文件编译成一个.exe文件,这样我就可以把它交给我的朋友,但每当我编译它时,我都会发现.exe文件本身有一个错误。我已经通过Windows命令提示符和GNU Shell提示符编译了它。无论我用哪种方式编译程序,它都会成功生成文件,但当我尝试运行它时,它会启动错误。它给我的错误是: 在动态链接库C:\GNUstep\bin\libicui18n46.dll中找不到过程入口点\u gxx\u personality\u v0

我正在运行Windows10,带有GNUstep。我一直试图将我的AI.m文件编译成一个.exe文件,这样我就可以把它交给我的朋友,但每当我编译它时,我都会发现.exe文件本身有一个错误。我已经通过Windows命令提示符和GNU Shell提示符编译了它。无论我用哪种方式编译程序,它都会成功生成文件,但当我尝试运行它时,它会启动错误。它给我的错误是:

在动态链接库C:\GNUstep\bin\libicui18n46.dll中找不到过程入口点\u gxx\u personality\u v0

在动态链接库C:\GNUstep\bin\libicuuc46.dll中找不到过程入口点\u gxx\u personality\u v0

但是,如果我使用make文件通过gnushell编译程序,然后在gnushell中通过/obj/AI.exe运行程序,它将正常加载

我还认为可能是我的电脑出了问题,所以我把.exe文件放在闪存驱动器上,并把它移到我的笔记本电脑上。当我试图在笔记本电脑上运行该程序时,它给出了错误:

程序无法启动,因为您的计算机中缺少gnustep-base-1_24.dll。请尝试重新安装程序以解决此问题

那么,是什么导致它只在通过make文件完成之后才工作,并且只通过make文件后面的shell工作呢?有没有办法修复这些错误以便我可以运行该文件

以下是AI.m文件中包含的代码:

#include "stdio.h"
#include "stdlib.h"
#include "Foundation/Foundation.h"

int main(void) {

    NSAutoreleasePool *myPool = [[NSAutoreleasePool alloc] init];

    char * rawinput = malloc(sizeof(char));

    system("cls");
    fflush(stdout);

    printf("Hello, my name is (Not Yet Available), and I am an in progress AI.");
    //printf("\nCurrently, I have no features, but will be working soon.");
    //printf("\nI can't wait until I am better able to assist you.");
    fflush(stdout);

    printf("\nCurrently I can only get the date and time for you of your current location.");
    printf("\nWould like me to get one of them for you?");
    printf("\n");
    fflush(stdout);

    scanf( "%s" , rawinput );

    NSString *input = [NSString stringWithCString:rawinput encoding:1];

    if ([input caseInsensitiveCompare:@"yes"]==NSOrderedSame) {
        printf("Great! Let me pull it for you right now.");
        fflush(stdout);
        //TODO: Pull the weather
    } else if([input caseInsensitiveCompare:@"no"]==NSOrderedSame) {
        printf("I understand.  I hope I was of service to you.");
        fflush(stdout);
    } else {
        printf("Sorry, I can only understand if you say 'yes' or 'no' right now.");
        printf("\nIf you want to try again, please restart the program.");
        fflush(stdout);
    }

    [myPool drain];
    return EXIT_SUCCESS;
}

编辑:因此我进入了我的计算机环境变量,将与GNUstep相关的变量移到列表的顶部,排在其他所有变量之前,现在程序将正常打开。因此,出现了一个关于从何处使用哪个.dll的问题。但是我如何让它在另一台没有安装GNUstep的计算机上运行呢?

用GNUstep编译的可执行文件与一些DLL动态链接。当我们在GNUShell提示符下运行exe时,可以找到所需的DLL,因此它可以正确运行。但是使用cmd,没有关于这些DLL的信息

如果要将exe分发到另一台计算机而不在该计算机上安装GNUstep,则解决方案是将所有必需的DLL复制到exe的位置

我个人发现复制位于
\bin
\GNUstep\System\Tools
中的所有DLL都可以工作。在我的例子中,有59个文件,总计59.4 MB

以及以下内容中的示例dll列表:

此外,GNUstep似乎提供了一些关于制作独立包的说明。您可以参考手册的
GNUstep配置文件
独立软件包
章节

-rw-rw-rw-  1 simon  staff  10101741 24 Jan 17:04 gnustep-base-1_24.dll 
-rw-rw-rw-  1 simon  staff    118546 24 Jan 17:08 libffi-5.dll 
-rw-rw-rw-  1 simon  staff    118784 24 Jan 17:01 libgcc_s_dw2-1.dll 
-rw-rw-rw-  1 simon  staff   2060376 24 Jan 17:09 libgcrypt-11.dll 
-rw-rw-rw-  1 simon  staff   3438376 24 Jan 17:09 libgnutls-26.dll 
-rw-rw-rw-  1 simon  staff    215716 24 Jan 17:11 libgpg-error-0.dll 
-rw-rw-rw-  1 simon  staff   1038350 24 Jan 17:09 libiconv-2.dll 
-rw-rw-rw-  1 simon  staff  15189954 24 Jan 17:12 libicudata46.dll 
-rw-rw-rw-  1 simon  staff   2518394 24 Jan 17:10 libicui18n46.dll 
-rw-rw-rw-  1 simon  staff   1590522 24 Jan 17:10 libicuuc46.dll 
-rw-rw-rw-  1 simon  staff    101390 24 Jan 17:11 libintl-8.dll 
-rw-rw-rw-  1 simon  staff    329671 24 Jan 17:11 libp11-kit-0.dll 
-rw-rw-rw-  1 simon  staff    978958 24 Jan 17:11 libstdc++-6.dll 
-rw-rw-rw-  1 simon  staff   3959238 24 Jan 17:10 libxml2-2.dll 
-rw-rw-rw-  1 simon  staff    100366 24 Jan 17:10 libz-1.dll 
-rw-rw-rw-  1 simon  staff    659799 24 Jan 17:07 objc-4.dll 
-rw-rw-rw-  1 simon  staff     94300 24 Jan 17:10 pthreadGC2.dll