是否可以将 gcc 二进制文件与 musl-gcc 重新链接?

Is it possible to relink gcc binaries with musl-gcc?

提问人:PrecisionPete 提问时间:9/29/2023 最后编辑:PrecisionPete 更新时间:9/29/2023 访问量:38

问:

我正在构建一个使用第三方 C 库的 Linux Go 21.1.1 应用程序。它适用于我的开发系统 (22.04),但在其他一些有 glibc 问题的 dists 上失败了。似乎一个合理的选择是将所有内容静态链接到 musl-gcc。但我认为第三方库仍在寻找 glibc,它正在引起冲突。

是否可以强制链接器重新链接所有内容?我真的不知道如何解决这个问题。它似乎同时使用两者......

env CC=/usr/bin/musl-gcc \
    CGO_FLAGS="-I/usr/include/X86_64-linux-musl" \
go build -a \
    -o $DIST/$PROG \
    -ldflags "-v -s -X 'main.Version=$VER' -linkmode external -extldflags '-static'"

产生这个...systray 是第三方库。

# github.com/getlantern/systray
In file included from /usr/include/x86_64-linux-musl/errno.h:10,
                 from cgo-gcc-prolog:30:
/usr/include/x86_64-linux-gnu/bits/errno.h:26:11: fatal error: linux/errno.h: No such file or directory
   26 | # include <linux/errno.h>
      |           ^~~~~~~~~~~~~~~
compilation terminated.

如果我只是用 gcc 编译它,它在某些 dists 上工作正常,但在其他 dist 上失败。例如,Debian 11 给出:

/usr/local/bin/myagent 
/usr/local/bin/myagent: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by /usr/local/bin/myagent)
/usr/local/bin/myagent: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32' not found (required by /usr/local/bin/myagent)
111

欢迎任何想法!

Linux GCC CGO MUSL-GCC

评论


答: 暂无答案