为啥我的 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 上运行时不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

linux系统组成及初识

linux 软件管理

为啥 emscripten 不编译我的函数?

为啥linux下要configure然后make make install

我的Linux上面为啥没有gcc编译器

Linux程序包管理之rpm包管理