为什么我的Linux编译二进制文件在Windows上运行时不起作用?

时间:2017-09-25 07:59:28

标签: c++ windows gtkmm

我有一个非常简单的代码,使用C ++和Gtkmm:

#include <gtkmm.h>

int main(int argc, char *argv[]){
Gtk::Main app(argc, argv);
Gtk::Window window;
Gtk::Main::run(window);
return EXIT_SUCCESS;
}

我在Linux上编译它,它是完美的我可以执行它。但问题是当我复制过去我无法实现的可执行文件以使其在Windows上可行时。但我一直认为Gtkmm是便携式的?!

我该如何解决这个问题?

非常感谢!

2 个答案:

答案 0 :(得分:1)

Gtkmm确实是一种便携式实现。 然而,您不能简单地将可执行文件从Linux复制并粘贴到Windows。您必须为正在运行它的每个平台编译一次程序。在您的情况下,您必须为Windows创建典型的.exe可执行文件。

如果要交叉编译Windows的可执行文件(即使用Linux机器为Windows创建.exe文件),请查看mingw编译器工具链。此blog也可能包含一些有趣的信息。

答案 1 :(得分:1)

这是因为 Linux 和 Windows 上的可执行文件具有不同的结构:
在 Linux 上,您有 ELF 二进制文件,它们在 Windows 上不起作用。 同样,如果您从 Windows 获取一个 EXE 二进制文件并尝试在 Linux 机器上执行它,它也不会工作。

有关详细信息,请参阅 ELF 和 EXE。