Как передать флаги gcc из файла goreleaser для связывания библиотек
я бегу
goreleaser build -f goreleaser_build.yml
, на REHL Linux. Если флаг не установлен, создаваемый двоичный файл имеет несколько общих динамически подключаемых библиотек:
linux-vdso.so.1 => (0x00007fff239f6000)
libm.so.6 => /lib64/libm.so.6 (0x00007f3a38370000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f3a3816c000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f3a37f50000)
librt.so.1 => /lib64/librt.so.1 (0x00007f3a37d48000)
libc.so.6 => /lib64/libc.so.6 (0x00007f3a3797a000)
/lib64/ld-linux-x86-64.so.2 (0x00007f3a38672000)
Моя цель — связать их все, кроме libc, статически. При работе
go build
я предполагаю, что это как
go build -lpthread -lm
и т. д., но
goreleaser
не принимает такие флаги. Есть
ldflags
в файле goreleaser, но я не могу заставить его действовать.
Мой файл goreleaser почти как по умолчанию:
builds:
- binary: <name>
main: cmd/<name>/main.go
flags:
- -mod=readonly
- -tags={{.Env.TAGS}}
ldflags:
- -s -w -X main.version={{.Env.VERSION}} -X main.commit={{.ShortCommit}} -X main.date={{.Date}} -X main.host={{.Env.HOSTNAME}}
gcflags:
- all=-trimpath={{.Env.HOME}}/git
asmflags:
- all=-trimpath={{.Env.HOME}}/git
Также пробовал устанавливать
export CGO_LDFLAGS="-g -O2 -lm"
но это не имеет никакого эффекта. libm все еще динамическая.
Как я могу установить его с помощью флагов файла goreleaseer / go env vars, чтобы он статически связывался с этими библиотеками? (я не могу
-static
потому что мне все еще нужна динамическая libc). Благодарю вас!