Как передать флаги 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). Благодарю вас!

0 ответов

Другие вопросы по тегам