介绍
可以帮助用户在非 mac 平台运行 mac 平台的软件。
当然这个也是有限制的。
安装
不同的平台需要安装的软件不同,这里以 Ubuntu 22.04 为例子进行介绍。
其他的 Linux 的发行版参考 这个。
下载需要库
sudo apt install cmake clang bison flex libfuse-dev libudev-dev pkg-config libc6-dev-i386 \
gcc-multilib libcairo2-dev libgl1-mesa-dev libglu1-mesa-dev libtiff5-dev \
libfreetype6-dev git git-lfs libelf-dev libxml2-dev libegl1-mesa-dev libfontconfig1-dev \
libbsd-dev libxrandr-dev libxcursor-dev libgif-dev libavutil-dev libpulse-dev \
libavformat-dev libavcodec-dev libswresample-dev libdbus-1-dev libxkbfile-dev \
libssl-dev python2
2. clone darling 项目
# clone 项目
git clone --recursive https://github.com/darlinghq/darling.git
构建和安装
# 进入刚才 clone 的目录
cd darling
# 删除已经安装的 darling
sudo ./tools/uninstall
# 创建构建目录
mkdir build && cd build
# 执行 cmake 进行构建
cmake ..
# 构建
make
# 安装
make install
使用
darling 不止可以直接运行 Mac 平台的软件,还可以安装 Mac 平台的 DMG 格式的软件,不过我没有这个需要,这里主要介绍在 Linux 平台运行 Mac 平台的命令行软件。
# 在 Linux 下启动一个 macOS 的环境
$ darling shell
Setting up a new Darling prefix at /home/tomshine/.darling
Bootstrapping the container with launchd...
The default interactive shell is now zsh.
To update your account to use zsh, please run `chsh -s /bin/zsh`.
For more details, please visit https://support.apple.com/kb/HT208050.
# 查看内核版本
$ uname -a
Darwin ubuntu22.04 20.6.0 Darwin Kernel Version 20.6.0 x86_64
实例
首先我们使用 go 写一个程序,然后进行测试,内容如下:
需要准备三个文件:
- main.go
- main_linux.go
- main_darwin.go
然后进行编译,进行测试。
main.go
内容如下:
package main
func main() {
PrintOS()
}
```ma c
`main_linux.go` 内容如下:
```go
//go:build linux
package main
import (
"fmt"
"runtime"
)
func PrintOS() {
fmt.Println("OS is", runtime.GOOS)
}
main_darwin.go
内容如下:
//go:build darwin
package main
import (
"fmt"
"runtime"
)
func PrintOS() {
fmt.Println("OS is", runtime.GOOS)
}
编译:
$ GOOS=linux go build -o darling-linux
$ GOOS=darwin go build -o darling-darwin
查看二进制的类型:
$ file darling-linux
darling-linux: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, Go BuildID=BrvHsgIjrBhSTFuvkyEm/m5-a3TFICalPz-oYNNpy/Nnl87_vvwB9rds54GOyM/JgRfd1wJbYrRhG83TWrq, with debug_info, not stripped
$ file darling-darwin
darling-darwin: Mach-O 64-bit x86_64 executable
运行:
$ ./darling-darwin
Cannot mmap segment __LINKEDIT at 0x1173000: File exists
# TODO 出错了,但是不知道什么原因,等待解决。