为啥我的 Linux 编译的二进制文件在 Windows 上运行时不起作用?
Posted
技术标签:
【中文标题】为啥我的 Linux 编译的二进制文件在 Windows 上运行时不起作用?【英文标题】:Why does my Linux-compiled binary not work when I run it on Windows?为什么我的 Linux 编译的二进制文件在 Windows 上运行时不起作用? 【发布时间】:2017-09-25 07:59:28 【问题描述】:我有一个使用 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 是便携的?!
我该如何解决这个问题?
非常感谢!
【问题讨论】:
该库可用于为不同平台构建代码——这并不意味着您可以跨平台复制可执行文件。您仍然需要为每个平台构建程序。 【参考方案1】:Gtkmm 确实是一个可移植的实现。
然而,您不能简单地将可执行文件从 Linux 复制并粘贴到 Windows。您必须为运行它的每个平台编译一次程序。在您的情况下,您必须为 Windows 创建典型的 .exe
可执行文件。
如果您想为 Windows 交叉编译可执行文件(即使用您的 Linux 机器为 Windows 创建.exe
文件),请查看mingw
编译器工具链。这个blog 也可能为您提供一些有趣的信息。
【讨论】:
谢谢你,但我听说用 Windows 编译 gtkmm3 一点也不简单...:/ 不是,这就是为什么你应该在交叉编译时获得一个 预编译 gtkmm3 来链接。 我怎样才能有一个预编译的 gtkmm3 ? :) @VickyHarris google 是你的朋友:wiki.gnome.org/Projects/gtkmm/MSWindows【参考方案2】:这是因为 Linux 和 Windows 上的可执行文件具有不同的结构: 在 Linux 上,你有 ELF 二进制文件,它在 Windows 上不起作用。 同样,如果您从 Windows 获取 EXE 二进制文件并尝试在 Linux 机器上执行它,它将无法工作。
有关详细信息,请参阅ELF 和 EXE。
【讨论】:
这是 Windows EXE 的正确链接:en.wikipedia.org/wiki/Portable_Executable以上是关于为啥我的 Linux 编译的二进制文件在 Windows 上运行时不起作用?的主要内容,如果未能解决你的问题,请参考以下文章