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

wn9m85ua  于 2023-06-29  发布在  Linux
关注(0)|答案(7)|浏览(204)

如何在Mac OS X下运行Linux二进制文件?
在谷歌上搜索了一下,我发现了几个模拟器,但没有一个是在Mac上运行Linux二进制文件的。有很多关于在Linux上运行MacOSX之类的文章--但这与我想做的相反。
更新:
感谢所有的答案!我完全了解MacPorts和Fink或其他任何东西;不,我不想要任何这些实用程序,我不想要任何包管理器,我更喜欢自己编译东西。我也有Parallels,可以设置虚拟机和所有爵士乐...
我唯一想做的是找到一种方法来运行一个二进制文件,我没有它的源代码,并且已经为Linux编译了,但我不想在Linux下运行它,而是在Mac OS X下运行它。关于模拟器的问题

x7rlezfr

x7rlezfr1#

有一个项目将Linux的binfmt_misc引入OS X,所以现在你需要的是一个ELF加载器,一个可以加载Mach-O和ELF的动态链接器,以及一些将Linux调用转换为OS X调用的机制。
为了获得灵感,您可以以忽略文件扩展名的方式实现动态链接器-可以加载libfoo.so.1(作为Linux ELF)和libfoo.1.dylib(作为Mach-O),以便可以重用OS X版本的系统库,这样您就不需要编写“托管在OS X上”libc.so,并且可以通过kext处理syscalls,该kext将Linux调用转换为内核中的OS X调用。
或者,以一种更优雅的方式,实现一个精简的Linux内核作为一个kext,使OSX内核成为一个双重用途。但是,这需要使用两组库。(二进制文件不冲突,所以基本上没问题)

yruzcnhs

yruzcnhs2#

设置一个虚拟机(我个人使用VMWare Fusion),然后在虚拟机上安装任何你想要的Linux发行版。
或者,如果你有Linux程序的源代码,你可以在Mac上重新编译它并在本地运行它。如果你安装了FinkMacPorts,你可以安装很多开源程序,而不会遇到太多麻烦。

vaqhlq81

vaqhlq813#

我最近发现了Noah,你可以用它在macOS上运行Linux二进制文件。你可以通过homebrew(brew install linux-noah/noah/noah)安装Noah。你应该能够做到这一点:

noah linux_binary

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

xu3bshqb

xu3bshqb4#

您可能会在MacOSX下使用Qemu的用户空间模拟器运行Linux可执行文件

egmofgnx

egmofgnx5#

如果您决定走虚拟化路线,还可以考虑VirtualBox
此外,如果您只需要类似UNIX的命令行工具,那么还有MacPorts项目。下面是我在Mac上设置git的基本方法:安装MacPorts后,您只需运行sudo port install git命令即可在系统上安装git

xzabzqsa

xzabzqsa6#

noah不允许二进制文件为我正确执行。使用Docker Desktop for Mac
Just do: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
尽管在ENTRYPOINT之前向Dockerfile添加WORKDIR /docker_stuff行可能是最好的。
如果将ENTRYPOINT更改为
ENTRYPOINT ["bash", "-c"]并添加
CMD ["your_binary"]
在它下面,你可以像这样将命令传递到图像中

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

t8e9dugd7#

你也可以在类似Linux的chroot中尝试Actually Portable Executable

相关问题