Golang如何将程序链接到用户自定义的macOS SDK
Golang如何将程序链接到用户自定义的macOS SDK 我了解到 Go 二进制文件是针对 macOS 10.7 SDK 链接的(当前版本为 10.14)。由此产生的问题是,一旦苹果要求所有应用程序都必须经过公证,Go 二进制文件就无法再打包到 macOS 应用程序中。应用程序公证要求应用程序至少链接到 macOS SDK 10.9。
有没有办法强制链接器使用更新的 SDK?我尝试了多种编译器和链接器选项以及环境变量(CGO_CFLAGS、extldflags 等),但都没有成功。
提前感谢!
更多关于Golang如何将程序链接到用户自定义的macOS SDK的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
在 Go 中,你可以通过设置 CGO_FLAGS 和 CGO_LDFLAGS 环境变量来强制链接器使用自定义的 macOS SDK。这通常需要指定 SDK 路径和最低部署目标版本。以下是一个示例,假设你的自定义 SDK 路径为 /path/to/MacOSX.sdk,并希望链接到 macOS 10.9 或更高版本。
首先,确保你已安装所需的 macOS SDK(例如,通过 Xcode 或自定义安装)。然后,在编译 Go 程序时设置环境变量:
export CGO_CFLAGS="-isysroot /path/to/MacOSX.sdk -mmacosx-version-min=10.9"
export CGO_LDFLAGS="-isysroot /path/to/MacOSX.sdk -mmacosx-version-min=10.9"
go build -o your_binary main.go
这里,-isysroot 指定 SDK 的根路径,-mmacosx-version-min 设置最低 macOS 版本。如果 SDK 路径是标准的 Xcode 路径(例如 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk),你可以直接使用它。
例如,使用 Xcode 的默认 SDK 路径(假设 Xcode 安装在 /Applications/Xcode.app):
export CGO_CFLAGS="-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -mmacosx-version-min=10.9"
export CGO_LDFLAGS="-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -mmacosx-version-min=10.9"
go build -o myapp main.go
这应该生成一个链接到指定 SDK 的二进制文件,满足公证要求。如果程序不使用 cgo,你可能需要启用 cgo(设置 CGO_ENABLED=1)来确保这些标志生效。
注意:确保 SDK 路径正确,且版本号与你的目标一致。你可以通过运行 otool -l your_binary | grep -A 5 LC_VERSION_MIN_MACOSX 来验证二进制文件的链接版本。

