I'm trying to cross-compile a macOS binary in Docker with the cgo DNS resolver enabled. My understanding is that this is doable without setting up a full macOS SDK toolchain, and by using the package from the macOS distribution. However, I'm unable to make it work. Somehow the compiler always rebuilds the net package from sources and the netgo DNS resolver becomes the de facto.
Very short implementation I'm using for testing: package main import "net" func main() { net.LookupIP("google.com") } The build output shows that net.a is built from sources instead of picking up /usr/local/go/pkg/darwin_amd64/net.a: $ ls -la /usr/local/go/pkg/darwin_amd64/net.a -rw-r--r-- 1 root root 1241304 Jun 6 23:51 /usr/local/go/pkg/darwin_amd64/net.a $ go clean -cache $ go build -x -o dns-test ./dns WORK=/tmp/go-build098597944 mkdir -p $WORK/b002/ cat >$WORK/b002/importcfg << 'EOF' # internal # import config importmap golang_org/x/net/route=vendor/golang_org/x/net/route packagefile context=/usr/local/go/pkg/darwin_amd64/context.a packagefile errors=/usr/local/go/pkg/darwin_amd64/errors.a packagefile vendor/golang_org/x/net/route=/usr/local/go/pkg/darwin_amd64/vendor/golang_org/x/net/route.a packagefile internal/nettrace=/usr/local/go/pkg/darwin_amd64/internal/nettrace.a packagefile internal/poll=/usr/local/go/pkg/darwin_amd64/internal/poll.a packagefile internal/singleflight=/usr/local/go/pkg/darwin_amd64/internal/singleflight.a packagefile io=/usr/local/go/pkg/darwin_amd64/io.a packagefile math/rand=/usr/local/go/pkg/darwin_amd64/math/rand.a packagefile os=/usr/local/go/pkg/darwin_amd64/os.a packagefile runtime=/usr/local/go/pkg/darwin_amd64/runtime.a packagefile sort=/usr/local/go/pkg/darwin_amd64/sort.a packagefile sync=/usr/local/go/pkg/darwin_amd64/sync.a packagefile sync/atomic=/usr/local/go/pkg/darwin_amd64/sync/atomic.a packagefile syscall=/usr/local/go/pkg/darwin_amd64/syscall.a packagefile time=/usr/local/go/pkg/darwin_amd64/time.a EOF cd /usr/local/go/src/net /usr/local/go/pkg/tool/linux_amd64/compile -o $WORK/b002/_pkg_.a -trimpath $WORK/b002 -p net -std -buildid _tpOUnWlUki4sCfaeRYL/_tpOUnWlUki4sCfaeRYL -goversion go1.10.3 -D "" -importcfg $WORK/b002/importcfg -pack -c=4 ./addrselect.go ./cgo_stub.go ./conf.go ./dial.go ./dnsclient.go ./dnsclient_unix.go ./dnsconfig_unix.go ./dnsmsg.go ./error_posix.go ./fd_unix.go ./file.go ./file_unix.go ./hook.go ./hook_unix.go ./hosts.go ./interface.go ./interface_bsd.go ./interface_darwin.go ./ip.go ./iprawsock.go ./iprawsock_posix.go ./ipsock.go ./ipsock_posix.go ./lookup.go ./lookup_unix.go ./mac.go ./net.go ./nss.go ./parse.go ./pipe.go ./port.go ./port_unix.go ./rawconn.go ./sendfile_stub.go ./sock_bsd.go ./sock_posix.go ./sockopt_bsd.go ./sockopt_posix.go ./sockoptip_bsdvar.go ./sockoptip_posix.go ./sys_cloexec.go ./tcpsock.go ./tcpsock_posix.go ./tcpsockopt_darwin.go ./tcpsockopt_posix.go ./udpsock.go ./udpsock_posix.go ./unixsock.go ./unixsock_posix.go ./writev_unix.go /usr/local/go/pkg/tool/linux_amd64/buildid -w $WORK/b002/_pkg_.a # internal cp $WORK/b002/_pkg_.a /root/.cache/go-build/71/71d5652836fbf72132d2864101b08cfb7dc5657beaa4cd0804e7d893646a3d60-d # internal mkdir -p $WORK/b001/ cat >$WORK/b001/importcfg << 'EOF' # internal # import config packagefile net=$WORK/b002/_pkg_.a packagefile runtime=/usr/local/go/pkg/darwin_amd64/runtime.a EOF cd /workspace/src/go.example.com/dns /usr/local/go/pkg/tool/linux_amd64/compile -o $WORK/b001/_pkg_.a -trimpath $WORK/b001 -p main -complete -buildid t_6XipuZQQ3V_Rlugib8/t_6XipuZQQ3V_Rlugib8 -goversion go1.10.3 -D "" -importcfg $WORK/b001/importcfg -pack -c=4 ./main.go /usr/local/go/pkg/tool/linux_amd64/buildid -w $WORK/b001/_pkg_.a # internal cp $WORK/b001/_pkg_.a /root/.cache/go-build/35/35e87cb5622549aaa8a434a32334706a5b3862ff7d49ce9daf3b29ba88094f41-d # internal cat >$WORK/b001/importcfg.link << 'EOF' # internal packagefile go.example.com/dns=$WORK/b001/_pkg_.a packagefile net=$WORK/b002/_pkg_.a packagefile runtime=/usr/local/go/pkg/darwin_amd64/runtime.a packagefile context=/usr/local/go/pkg/darwin_amd64/context.a packagefile errors=/usr/local/go/pkg/darwin_amd64/errors.a packagefile vendor/golang_org/x/net/route=/usr/local/go/pkg/darwin_amd64/vendor/golang_org/x/net/route.a packagefile internal/nettrace=/usr/local/go/pkg/darwin_amd64/internal/nettrace.a packagefile internal/poll=/usr/local/go/pkg/darwin_amd64/internal/poll.a packagefile internal/singleflight=/usr/local/go/pkg/darwin_amd64/internal/singleflight.a packagefile io=/usr/local/go/pkg/darwin_amd64/io.a packagefile math/rand=/usr/local/go/pkg/darwin_amd64/math/rand.a packagefile os=/usr/local/go/pkg/darwin_amd64/os.a packagefile sort=/usr/local/go/pkg/darwin_amd64/sort.a packagefile sync=/usr/local/go/pkg/darwin_amd64/sync.a packagefile sync/atomic=/usr/local/go/pkg/darwin_amd64/sync/atomic.a packagefile syscall=/usr/local/go/pkg/darwin_amd64/syscall.a packagefile time=/usr/local/go/pkg/darwin_amd64/time.a packagefile runtime/internal/atomic=/usr/local/go/pkg/darwin_amd64/runtime/internal/atomic.a packagefile runtime/internal/sys=/usr/local/go/pkg/darwin_amd64/runtime/internal/sys.a packagefile fmt=/usr/local/go/pkg/darwin_amd64/fmt.a packagefile reflect=/usr/local/go/pkg/darwin_amd64/reflect.a packagefile math=/usr/local/go/pkg/darwin_amd64/math.a packagefile internal/testlog=/usr/local/go/pkg/darwin_amd64/internal/testlog.a packagefile internal/race=/usr/local/go/pkg/darwin_amd64/internal/race.a packagefile strconv=/usr/local/go/pkg/darwin_amd64/strconv.a packagefile unicode/utf8=/usr/local/go/pkg/darwin_amd64/unicode/utf8.a packagefile unicode=/usr/local/go/pkg/darwin_amd64/unicode.a packagefile internal/cpu=/usr/local/go/pkg/darwin_amd64/internal/cpu.a EOF mkdir -p $WORK/b001/exe/ cd . /usr/local/go/pkg/tool/linux_amd64/link -o $WORK/b001/exe/a.out -importcfg $WORK/b001/importcfg.link -buildmode=exe -buildid=6-oHCWY8Z57CMNCfUB-n/t_6XipuZQQ3V_Rlugib8/9dtyWN9RKHU5XwbNrmpr/6-oHCWY8Z57CMNCfUB-n -extld=gcc $WORK/b001/_pkg_.a /usr/local/go/pkg/tool/linux_amd64/buildid -w $WORK/b001/exe/a.out # internal cp $WORK/b001/exe/a.out dns-test rm -r $WORK/b001/ This didn't work as the netgo DNS resolver is the one used: $ otool -L ./dns-test ./dns-test: $ GODEBUG=netdns=2 ./dns-test go package net: built with netgo build tag; using Go's DNS resolver go package net: hostLookupOrder(google.com) = files,dns Any ideas what I am doing wrong? Thanks, -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.