← Back to issue list

go plugin with snapcraft 4 doesn't support building static binaries

View original Launchpad issue

Metadata

Project
snapcraft
Number
#1884558
Type
issue
State
open
Author
~anonymouse67
Labels
Created
2020-06-22 15:06:57.106949+00:00
Updated
2021-03-25 17:15:19.577295+00:00
Closed

Current evaluation

No evaluation has been recorded for this issue yet.

Issue body

I have a go program which does not require any dynamic library dependencies, and as such I would like to link it statically and use the `base: base` for this snap, so I have tried this: ``` parts:   etrace:     build-environment:       - CGO_ENABLED: "0"     plugin: go     source: . ``` but it still produces a dynamically linked executable against libc, because snapcraft internally does this command always: ``` Building etrace go build -o /root/parts/etrace/install/bin ./... go build -ldflags -linkmode=external -o /root/parts/etrace/install/bin ./... # github.com/anonymouse64/etrace/cmd/etrace loadinternal: cannot find runtime/cgo ``` which completes, but gives me this: ``` $ ldd ./squashfs-root/bin/etrace         linux-vdso.so.1 (0x00007ffd91f77000)         libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f3d02414000)         /lib64/ld-linux-x86-64.so.2 (0x00007f3d02624000) ``` which I can't use with the bare base snap. What works instead is to do this manually: ```     override-build: |       mkdir -p $SNAPCRAFT_PART_INSTALL/bin       cd $SNAPCRAFT_PART_SRC       go build -o $SNAPCRAFT_PART_INSTALL/bin ./... ``` It would be nice if snapcraft either: 1. automatically detected that CGO_ENABLED=0 was set in the build-environment and didn't manually link things 2. automatically detected that the built binaries from go build -o ./bin ./... were not dynamically linked at all and skipped the final link step 3. had a property or otherwise first-class mechanism to specify that a go part built with the go plugin should be statically compiled (perhaps an option to the plugin yaml, etc.), this could also potentially replace setting the build-environment for CGO_ENABLED=0 as well snapcraft, version 4.0.5

Evaluation history

No evaluation history available.