在Mac OS X下模拟Linux二进制文件

时间:2009-12-23 17:35:34

标签: linux macos binary emulation

如何在Mac OS X下运行Linux二进制文件?

Google搜索我发现了几个模拟器,但没有在Mac上运行Linux二进制文件。有很多关于在Linux上运行Mac OS X的帖子和那种东西 - 但这与我想做的相反。

更新

感谢所有答案!我完全了解MacPorts和Fink或任何其他事情;不,我不想要任何这些实用程序,我不想要任何包管理器,我更喜欢自己编译。我也有Parallels,可以设置虚拟机和所有爵士......

我唯一想做的就是找到一种方法来运行我没有源代码的二进制文件,并且已经为Linux编译了,但我不想在Linux下运行它但在Mac OS X下运行它因此我对模拟器的问题。

6 个答案:

答案 0 :(得分:7)

设置虚拟机(我个人使用VMWare Fusion),然后在虚拟机上安装所需的Linux发行版。

或者,如果你有Linux程序的源代码,很可能你可以在Mac上重新编译它并本机运行它。如果您安装FinkMacPorts,则可以安装很多开源程序而不会有太多麻烦。

答案 1 :(得分:7)

有一个项目向Linux X引入类似Linux的binfmt_misc,所以现在你需要的是一个ELF加载器,一个可以加载Mach-O和ELF的动态链接器,以及一些将Linux调用转换为OS X的机制

只是为了灵感,您可以以忽略文件扩展名的方式实现动态链接器 - libfoo.so.1(作为Linux ELF)和libfoo.1.dylib(作为Mach-O)都可以加载因此,OS X版本的系统库可以重复使用,因此您不需要编写“托管在OS X上”libc.so和syscalls可以通过kext来处理,该kext将Linux调用转换为内核中的OS X调用。

或者,以更优雅的方式,将精简的Linux内核实现为kext,使OS X内核成为双重用途。但是,这将要求您使用两组库。 (二进制文件没有冲突所以它基本上没问题)

答案 2 :(得分:4)

使用Qemu User Space Emulator

在Mac OS X下运行Linux可执行文件可能会有些运气

答案 3 :(得分:4)

我最近找到Noah,您可以使用它在macOS上运行Linux二进制文件。您可以通过自制程序(brew install linux-noah/noah/noah)安装Noah。然后你应该能够做到这一点:

noah linux_binary

根据我的经验,二进制文件的行为与我在Ubuntu机器上看到的相符。

答案 4 :(得分:2)

如果您决定采用虚拟化路线,请同时考虑VirtualBox

此外,如果您只需要像命令行工具那样的UNIX,那么就有MacPorts项目。这基本上就是我在我的mac上设置git的方式:安装完MacPorts后,只需运行sudo port install git命令即可​​在系统上安装git

答案 5 :(得分:1)

noah不允许二进制文件对我正确执行。使用Docker Desktop for Mac

只需: docker pull centos:latest # 73MB CentOS docker image

在Dockerfile中为运行二进制文件所需的文件夹创建一个文件夹:

FROM centos
COPY your_binary /bin/
ENTRYPOINT ["your_binary"]

您可以使用

进行构建

docker build -t image_name

然后执行

docker run image_name就像二进制文件本身一样。为我工作。希望它可以帮助别人。而且,如果您需要特定的输出或将文件存储在某个位置,则可以使用-v将卷装载到docker上,例如:

docker run -v path_to_my_stuff:/docker_stuff image_name

尽管最好在WORKDIR /docker_stuff之前的Dockerfile上添加ENTRYPOINT行。

如果将ENTRYPOINT更改为

ENTRYPOINT ["bash", "-c"] 并添加

CMD ["your_binary"]

在它的下面,您实际上可以将命令传递到图像中,例如

docker run -v path_on_local:/in_container_path image_name "your_binary some_parameters -optionrequiringzerowhitespacebeforeinputvalue"