Skip to content

cmd/link: musl dynamic linker/loader not found correctly #45034

@dilyn-corner

Description

@dilyn-corner

What version of Go are you using (go version)?

$ go version
go version go1.16.2 linux/amd64

Does this issue reproduce with the latest release?

Yes.

What operating system and processor architecture are you using (go env)?

go env Output
$ go env
GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/home/dilyn/.cache/go-build"
GOENV="/home/dilyn/.config/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOINSECURE=""
GOMODCACHE="/home/dilyn/go/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
GOPATH="/home/dilyn/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/usr/lib/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/lib/go/pkg/tool/linux_amd64"
GOVCS=""
GOVERSION="go1.16.2"
GCCGO="gccgo"
AR="ar"
CC="cc"
CXX="g++"
CGO_ENABLED="1"
GOMOD="/dev/null"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build888305945=/tmp/go-build -gno-record-gcc-switches"

What did you do?

Build go from source:

export CC="${CC:-cc}"
export GOARCH=amd64
export GO_LDFLAGS="-w -s"

[ -f "$KISS_ROOT/var/db/kiss/installed/go/manifest" ] || {
    export GOROOT=$PWD/go1.4-bootstrap
    export GOROOT_FINAL=$PWD/lib/go-bootstrap

    mkdir -p lib/go-bootstrap

    cd "$GOROOT/src"
    ./make.bash
    cd ..
    cp -a bin pkg src ../lib/go-bootstrap
    cd ..
}

export GOROOT_FINAL=/usr/lib/go

if [ -f "$KISS_ROOT/var/db/kiss/go/manifest" ]; then
    export GOROOT_BOOTSTRAP=/usr/lib/go
else
    export GOROOT_BOOTSTRAP=$PWD/lib/go-bootstrap
fi

export GOROOT=$PWD/go-current

(
    cd "$GOROOT/src"
    ./make.bash --no-clean -v
)

cd "$GOROOT"

mkdir -p "$1/usr/bin" "$1/usr/lib/go/bin"

install -m755 "bin/go"    "$1/usr/lib/go/bin/go"
install -m755 "bin/gofmt" "$1/usr/lib/go/bin/gofmt"

ln -s "/usr/lib/go/bin/go"    "$1/usr/bin"
ln -s "/usr/lib/go/bin/gofmt" "$1/usr/bin"

cp -a misc pkg src lib "$1/usr/lib/go"

Build age with -buildmode=pie:

export GOPATH="$PWD/go"
mkdir -p bin
go build \
    -trimpath \
    -modcacherw \
    -buildmode=pie \
    -o bin filippo.io/age/cmd/...

mkdir -p "$1/usr/bin"
install -Dm755 bin/age        "$1/usr/bin"
install -Dm755 bin/age-keygen "$1/usr/bin"

What did you expect to see?

I expect that ldd /usr/bin/age-keygen reports:
/lib/ld-musl-x86_64.so.1

What did you see instead?

Instead, ldd reports:
/lib64/ld-linux-x86-64.so.2
Which results in a message when executing age-keygen:
sh: age-keygen: not found

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions