Emulating Linux binaries under Mac OS X

前端 未结 6 1290
Happy的楠姐
Happy的楠姐 2021-02-01 16:11

How do I run Linux binaries under Mac OS X?

Googling around I found a couple of emulators but none for running Linux binaries on a Mac. There are quite a few posts about

相关标签:
6条回答
  • 2021-02-01 16:52

    Well there is a project introducing something like Linux's binfmt_misc to OS X so now what you need is an ELF loader, a dynamic linker that can load both Mach-O and ELF, and some mechanism to translate Linux calls to OS X ones.

    Just for inspiration, you can implement the dynamic linker in the fashion that it ignores filename extension - both libfoo.so.1 (as an Linux ELF) and libfoo.1.dylib (as an Mach-O) can be loaded so that OS X versions of system libraries can be reused so that you do not need to write a "hosted on OS X" libc.so and syscalls can be handled by an kext that translates Linux calls to OS X ones in kernel.

    Or, in an more elegant way, implement a stripped down Linux kernel as a kext that makes the OS X kernel a dual-purpose. However that will require you to use two sets of libraries. (Binaries do not clash so it is largely okay)

    0 讨论(0)
  • 2021-02-01 16:53

    You might have some luck with running Linux executables under Mac OS X using Qemu's User Space Emulator

    0 讨论(0)
  • 2021-02-01 16:57

    If you decide to go the virtualization route, consider also VirtualBox.

    Also, if you only need UNIX like command line tools, there is the MacPorts project. This is basically how I set up git on my mac: after having installed MacPorts you just have to run the sudo port install git command to install git on your system.

    0 讨论(0)
  • 2021-02-01 17:06

    I recently found Noah, which you can use to run Linux binaries on macOS. You can install Noah via homebrew (brew install linux-noah/noah/noah). Then you should be able to do this:

    noah linux_binary
    

    In my experience the behavior of the binary matches what I see on my Ubuntu machine.

    0 讨论(0)
  • 2021-02-01 17:10

    Set up a virtual machine (I personally use VMWare Fusion) and then install whatever distro of Linux you desire on the virtual machine.

    Or, if you have the source to the Linux program, chances are you can recompile it on a Mac and run it natively. If you install Fink or MacPorts, you can install a lot of open source programs without much trouble.

    0 讨论(0)
  • 2021-02-01 17:11

    noah does not allow the binaries to execute properly for me. Use Docker Desktop for Mac.

    Just do: docker pull centos:latest # 73MB CentOS docker image

    Make a folder for what is needed to run your binary, and in your Dockerfile:

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

    and you can build it with

    docker build -t image_name

    then execute with

    docker run image_name as if it were the binary itself. Worked for me. Hope it helps someone else. And if you need specific outputs or to store files somewhere you can mount volumes onto the docker with -v, for example:

    docker run -v path_to_my_stuff:/docker_stuff image_name,

    though adding a WORKDIR /docker_stuff line to the Dockerfile before ENTRYPOINT is probably best.

    If you change ENTRYPOINT to

    ENTRYPOINT ["bash", "-c"] and add

    CMD ["your_binary"]

    underneath it, you can actually pass the command into the image like

    docker run -v path_on_local:/in_container_path image_name "your_binary some_parameters -optionrequiringzerowhitespacebeforeinputvalue"
    
    0 讨论(0)
提交回复
热议问题