无法执行使用 GNUstep 编译的程序
Can't Execute Program compiled with GNUstep
我 运行宁 Windows 10,使用 GNUstep。我一直在尝试将我的 AI.m 文件编译成 .exe 文件,这样我就可以把它交给我的朋友,但是每当我编译它时,.exe 文件本身都会出错。我通过 Windows 命令提示符和 GNU Shell 提示符编译了它。无论我用哪种方式编译程序,它都会成功生成文件,但是当我尝试 运行 它时,它会启动错误。它给我的错误是:
The procedure entry point _gxx_personality_v0 could not be located in the dynamic link library C:\GNUstep\bin\libicui18n46.dll
The procedure entry point _gxx_personality_v0 could not be located in the dynamic link library C:\GNUstep\bin\libicuuc46.dll
但是如果我使用 make 文件通过 GNU shell 编译程序,那么 运行 通过 /obj/AI.exe 仍然在 GNU shell 中的程序,它将正常加载。
我还认为可能是我的电脑出了问题,所以我将 .exe 文件放到闪存驱动器上,然后将它移到我的笔记本电脑上。当我尝试 运行 笔记本电脑上的程序时,出现错误:
The program can't start because gnustep-base-1_24.dll is missing from your computer. Try reinstalling the program to fix this problem.
那么是什么导致它只能在通过 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 动态链接。当我们 运行 GNU Shell 提示符下的 exe 时,可以找到所需的 dll,因此它 运行 是正确的。但是使用 cmd,没有关于这些 dll 的信息。
如果您想将它分发到另一台计算机而不在该计算机上安装 GNUstep,解决方案是将所有必需的 dll 复制到 exe 的位置。
我个人发现复制位于 <your GUNstep installation folder>\bin
和 <your GUNstep installation folder>\GNUstep\System\Tools
中的所有 dll 是可行的。就我而言,它是 59 个文件,总计 59.4 MB。
以及来自 a post that helped me a lot 的示例 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 似乎提供了一些关于制作独立包的说明。可以参考documentation.
的GNUstep Configuration File
和Standalone packages
章节
我 运行宁 Windows 10,使用 GNUstep。我一直在尝试将我的 AI.m 文件编译成 .exe 文件,这样我就可以把它交给我的朋友,但是每当我编译它时,.exe 文件本身都会出错。我通过 Windows 命令提示符和 GNU Shell 提示符编译了它。无论我用哪种方式编译程序,它都会成功生成文件,但是当我尝试 运行 它时,它会启动错误。它给我的错误是:
The procedure entry point _gxx_personality_v0 could not be located in the dynamic link library C:\GNUstep\bin\libicui18n46.dll
The procedure entry point _gxx_personality_v0 could not be located in the dynamic link library C:\GNUstep\bin\libicuuc46.dll
但是如果我使用 make 文件通过 GNU shell 编译程序,那么 运行 通过 /obj/AI.exe 仍然在 GNU shell 中的程序,它将正常加载。
我还认为可能是我的电脑出了问题,所以我将 .exe 文件放到闪存驱动器上,然后将它移到我的笔记本电脑上。当我尝试 运行 笔记本电脑上的程序时,出现错误:
The program can't start because gnustep-base-1_24.dll is missing from your computer. Try reinstalling the program to fix this problem.
那么是什么导致它只能在通过 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 动态链接。当我们 运行 GNU Shell 提示符下的 exe 时,可以找到所需的 dll,因此它 运行 是正确的。但是使用 cmd,没有关于这些 dll 的信息。
如果您想将它分发到另一台计算机而不在该计算机上安装 GNUstep,解决方案是将所有必需的 dll 复制到 exe 的位置。
我个人发现复制位于 <your GUNstep installation folder>\bin
和 <your GUNstep installation folder>\GNUstep\System\Tools
中的所有 dll 是可行的。就我而言,它是 59 个文件,总计 59.4 MB。
以及来自 a post that helped me a lot 的示例 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 似乎提供了一些关于制作独立包的说明。可以参考documentation.
的GNUstep Configuration File
和Standalone packages
章节