相关疑难解决方法(0)

为什么"可执行文件"操作系统依赖?

我知道每个CPU /架构都有自己的指令集,因此为特定CPU编写的程序(二进制)不能在另一个CPU上运行.但我真正理解的是为什么一个可执行文件(例如.exe之类的二进制文件)无法在Linux上运行,但即使在同一台机器上也可以在Windows上运行.

这是一个基本问题,我期待的答案是.exe和其他二进制格式可能不是原始机器指令,但它们包含一些依赖于操作系统的数据.如果这是真的,那么这个OS依赖的数据是什么样的?作为一个例子,.exe文件的格式是什么,以及它与Linux可执行文件之间的区别?

有没有来源我可以获得有关此的简要和详细信息?

linux windows compiler-construction executable operating-system

38
推荐指数
3
解决办法
6194
查看次数

Linux可执行文件是否与OS X"兼容"?

如果你在基于Linux的平台上编译一个程序,比如C,然后移植它来使用MacOS库,它会起作用吗?

核心机器代码是来自兼容Mac和Linux的编译器吗?

我问这个的原因是因为两者都是"基于UNIX的"所以我认为这是真的,但我不太确定.

c linux macos executable compilation

24
推荐指数
2
解决办法
1万
查看次数

为什么linux编译的程序不适用于Windows

我几乎可以肯定我的问题是因为编译的程序被编译为linux可执行文件,但我只是想仔细检查一下.

#include <stdio.h>
#include <stdlib.h>
int main()
{
    printf("Hello world!\n");
    return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

上面的"程序"应该在Windows和Linux上编译得很好,因为它与源代码兼容,因为没有特定于操作系统的库或类似的东西.

然而,当我在我的Linux机器上键入"c99 hello.c -o hello.exe",然后将该"可执行文件"传输到Windows机器时,它拒绝运行.根据我的理解,Linux生成一个只能在linux上运行的可执行文件,因此添加".exe"无效.要在Linux for Windows上构建该程序,我需要在Windows机器上重新编译该程序吗?或者还有另一种更简单的方法吗?

c linux windows

9
推荐指数
1
解决办法
3319
查看次数

收到错误:bash:(程序):无法执行二进制文件:Exec 格式错误,在 32 位和 64 位 Windows 上

有一个为语言研究开发的程序(http://people.csail.mit.edu/mcollins/code.html)。当我尝试在 Windows 上使用 Git bash 终端运行解析器时,出现错误:

bash: cannot execute binary file: Exec format error.
Run Code Online (Sandbox Code Playgroud)

首先,我认为这是因为我的 64 位操作系统,因为该文件是 32 位的。因此,我在 32 位系统上尝试了该程序,但得到了相同的消息。

关于如何解决这个问题有什么想法吗?:

file (program)显示:

ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.2.5, with debug_info, not stripped
Run Code Online (Sandbox Code Playgroud)

uname -srv对于我的 64 位操作系统,显示:

MINGW64_NT-10.0-19042 3.1.7-340.x86_64 2021-03-26 22:17 UTC
Run Code Online (Sandbox Code Playgroud)

uname -srv对于我的 32 位操作系统,显示:

MINGW32_NT-6.1-7601 3.1.7-340.i686 2021-03-26 22:01 UTC
Run Code Online (Sandbox Code Playgroud)

PS:如果你想尝试一下,这段代码应该可以在程序目录中运行,但它对我不起作用:

gunzip -c models/model2/events.gz | code/parser examples/sec23.tagged models/model2/grammar 10000 1 1 1 1 …
Run Code Online (Sandbox Code Playgroud)

unix windows bash executable elf

8
推荐指数
1
解决办法
9万
查看次数

为什么我们必须在同一台机器上重新编译不同操作系统的交流源代码?

当我编译我的c源代码时(例如在Linux环境中),编译器以"机器可读"格式生成文件.

  • 为什么同一个文件在不同的操作系统下不能在同一台机器上运行?
  • 关于我们"执行"这个文件的方式有问题吗?

c compilation

5
推荐指数
1
解决办法
772
查看次数

为什么我们需要针对不同的平台(例如Windows/Linux)进行编译?

我已经学习了关于CPU/ASM/C的基础知识,并且不明白为什么我们需要为不同的OS目标不同地编译C代码.编译器所做的是创建汇编程序代码,然后汇编到二进制机器代码.ASM代码当然因CPU架构(例如ARM)而不同,因为指令集架构不同.

但是当Linux和Windows在同一个CPU上运行时,MOVE/ADD/......之类的机器操作应该是相同的.虽然我知道有一些特定于操作系统的功能,比如打印到终端,但是这个功能可以由stdio.h的不同实现提供.而且,我可以创建一个非常基本的程序,只计算a + b而不打印任何东西,这样我就不需要任何特定于操作系统的代码.为什么我仍然需要为Linux和Windows编译而不是仅仅为我的Linux可执行文件添加.exe-Extension?

c cpu assembly compilation cpu-architecture

4
推荐指数
1
解决办法
818
查看次数

C 可执行文件可以在所有操作系统上运行吗

如果我在操作系统(例如:Windows)中创建一个 C 可执行文件,该文件是否可以在其他操作系统(例如:Linux、Mac-OS)上运行。

c executable operating-system cross-compiling

3
推荐指数
2
解决办法
4411
查看次数