Невозможно выполнить программу, скомпилированную с помощью GNUstep

Я использую Windows 10 с GNUstep. Я пытался скомпилировать мой файл AI.m в.exe, чтобы я мог передать его своему другу, но всякий раз, когда я его компилирую, я получаю сообщение об ошибке с самим файлом.exe. Я скомпилировал его как из командной строки Windows, так и из командной строки GNU Shell. В любом случае, я скомпилирую программу, она создаст файл, но когда я попытаюсь запустить его, он запустит ошибки. Это дает мне ошибки:

Не удалось найти точку входа в процедуру _gxx_personality_v0 в библиотеке динамических ссылок C:\GNUstep\bin\libicui18n46.dll

Не удалось найти точку входа в процедуру _gxx_personality_v0 в библиотеке динамических ссылок C:\GNUstep\bin\libicuuc46.dll

Но если я скомпилирую программу через оболочку GNU с помощью файла make, а затем запустите программу через /obj/AI.exe, пока она еще находится в оболочке GNU, она загрузится нормально.

Я также подумал, что, возможно, проблема возникла на моем компьютере, поэтому я положил.exe на флэш-накопитель и перенес его на свой ноутбук. Когда я попытался запустить программу на своем ноутбуке, она выдала ошибку:

Программа не может запуститься, потому что gnustep-base-1_24.dll отсутствует на вашем компьютере. Попробуйте переустановить программу, чтобы решить эту проблему.

Так, что заставляет это работать только после того, как это сделано через файл make, и только через оболочку после файла make? Любой способ исправить эти ошибки, чтобы я мог запустить файл?

Вот код, включенный в файл 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?

0 ответов

Исполняемый файл, скомпилированный с помощью GNUstep, динамически связывается с некоторыми dll. Когда мы запускаем exe в приглашении оболочки GNU, необходимые dll могут быть найдены, и, следовательно, он работает правильно. Но с помощью cmd информации об этих dll нет.

Решение состоит в том, чтобы скопировать все необходимые библиотеки DLL в папку с исполняемым файлом, если вы хотите распространить его на другой компьютер, не устанавливая на него GNUstep.

Я лично обнаружил копирование всех dll, расположенных в <your GUNstep installation folder>\bin а также <your GUNstep installation folder>\GNUstep\System\Toolsдолжно сработать. В моем случае это 59 файлов, которые в сумме составляют 59,4 МБ.

И пример списка dll из сообщения, которое мне очень помогло:

-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 

Кроме того, кажется, что GNUstep предоставляет некоторые инструкции по созданию автономных пакетов. Вы можете обратиться кGNUstep Configuration File а также Standalone packagesглавы документации.

Другие вопросы по тегам