Zig作为C Linux-> Mac跨跨编译器,用于使用GO-SQLITE 3错误:无法找到动态系统库'resolv'

问题描述 投票:0回答:1
我试图使建筑商Docker映像达到合理的尺寸。 (Goreleaser/Goreleaser-Cross适用于所有平台,但超过8GB)。

使用Zig(0.14.0)作为交叉编译器,Linux和Windows目标在Alpine和Debian/Bookworm-Image上构建/运行良好(GO 1.24.1),但MAC编译失败了: /usr/local/go/pkg/tool/linux_amd64/link: running zig failed: exit status 1 /opt/zig/zig cc -target x86_64-macos -arch x86_64 -m64 -Wl,-headerpad,1144 -o $WORK/b001/exe/a.out /tmp/go-link-2504977538/go.o /tmp/go-link-2504977538/000000.o /tmp/go-link-2504977538/000001.o /tmp/go-link-2504977538/000002.o /tmp/go-link-2504977538/000003.o /tmp/go-link-2504977538/000004.o /tmp/go-link-2504977538/000005.o /tmp/go-link-2504977538/000006.o /tmp/go-link-2504977538/000007.o /tmp/go-link-2504977538/000008.o /tmp/go-link-2504977538/000009.o /tmp/go-link-2504977538/000010.o /tmp/go-link-2504977538/000011.o /tmp/go-link-2504977538/000012.o /tmp/go-link-2504977538/000013.o /tmp/go-link-2504977538/000014.o /tmp/go-link-2504977538/000015.o /tmp/go-link-2504977538/000016.o /tmp/go-link-2504977538/000017.o /tmp/go-link-2504977538/000018.o /tmp/go-link-2504977538/000019.o /tmp/go-link-2504977538/000020.o /tmp/go-link-2504977538/000021.o /tmp/go-link-2504977538/000022.o -lresolv -O2 -g -O2 -g -lpthread -framework CoreFoundation -framework Security error: unable to find dynamic system library 'resolv' using strategy 'paths_first'. searched paths: none

我了解的是,溶质图书馆应该是LIBC的一部分,因此,如果Zig不提供它(通过MAC的Musl-implentation),它应该来自MAC SDK。 我还尝试过提供:

(export GOOS=darwin && export GOARCH=amd64 && export CC="zig cc -target x86_64-macos --sysroot ${MACOS_SDK} -isysroot ${MACOS_SDK} -I${MACOS_SDK}/usr/include -Wno-nullability-completeness" && go build -o dist/$GOOS/$GOARCH/)

无济于事,仍然获得“无法找到动态系统库” ...

可能缺少什么?如何获得CGO Linux→Mac交叉补偿与最近的曲折一起使用?

最终,我最终保留了Linux/Windows的曲折,并使用Mac的OSXCross-image:
dockerfile

FROM crazymax/osxcross:14.5-r0-alpine as osxcross FROM golang:1.24-alpine RUN apk update RUN apk add curl zip gettext clang lld musl-dev RUN go install github.com/jstemmer/go-junit-report/v2@latest RUN curl https://ziglang.org/download/0.14.0/zig-linux-x86_64-0.14.0.tar.xz | tar x -J -C /opt RUN ln -s /opt/zig* /opt/zig ENV PATH="$PATH:/opt/zig" RUN mkdir /.cache RUN chmod -R 777 /.cache RUN chmod -R 777 /go/pkg/mod COPY --from=osxcross /osxcross /osxcross ENV PATH="/osxcross/bin:$PATH" ENV LD_LIBRARY_PATH="/osxcross/lib:$LD_LIBRARY_PATH"

Jenkinsfile摘录

sh '''#!/bin/sh export CGO_ENABLED=1 #https://github.com/goreleaser/goreleaser-cross?tab=readme-ov-file#supported-toolchainsplatforms (export GOOS=darwin && export GOARCH=amd64 && export CC="o64-clang" && go build -o dist/$GOOS/$GOARCH/) (export GOOS=darwin && export GOARCH=arm64 && export CC="oa64-clang" && go build -o dist/$GOOS/$GOARCH/) #https://ziglang.org/download/0.14.0/release-notes.html#Support-Table (export GOOS=linux && export GOARCH=amd64 && export CC="zig cc -target x86_64-linux" && go build -o dist/$GOOS/$GOARCH/) (export GOOS=windows && export GOARCH=amd64 && export CC="zig cc -target x86_64-windows" && go build -o dist/$GOOS/$GOARCH/) go test -coverprofile=coverage.out -v 2>&1 ./... | go-junit-report -set-exit-code > report.xml ''' junit testResults: 'report.xml'
go cross-compiling cgo zig
1个回答
0
投票

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.