gpt4 book ai didi

go - 静态链接 stdlib.so

转载 作者:数据小太阳 更新时间:2023-10-29 03:26:39 30 4
gpt4 key购买 nike

关注此blog post我试图编译 stdlib.so 以将其他代码与其链接。不幸的是,stdlib.so 本身是一个动态链接的二进制文件:

# ldd /usr/local/go/pkg/linux_amd64_dynlink/libstd.so
ldd: warning: you do not have execution permission for `/usr/local/go/pkg
/linux_amd64_dynlink/libstd.so'
linux-vdso.so.1 (0x00007ffd611d7000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f82bb2c5000)
libc.so.6 => /lib64/libc.so.6 (0x00007f82baf04000)
/lib64/ld-linux-x86-64.so.2 (0x000055e99ffd7000)

我尝试用不同的标志构建它,但这似乎没有做任何事情/不是我预期的结果。 IE。我试过:

go install -x -buildmode=shared --ldflags '-extldflags "-static"' std

例如,但这会转化为一组错误的编译/链接指令,因此不会生成 libstd.so。

理由

我想这样做是因为我有几个 Go 程序需要构建并将它们放入 Docker 镜像中。静态链接 Go 可执行文件需要很长时间(大约一分钟,大约 20 秒),所以我希望将所有不经常更改的依赖项编译到共享库中,同时只重新编译应用程序的实际代码(这会减少编译时间从大约 10 分钟到几秒)。我也宁愿不必将 Docker 镜像基于某些 Linux 镜像(这将使它们变得 600+ MB 大,而只有 60 MB 的 Go 代码)。

最佳答案

这是另一篇关于使用 CGo 静态编译 Go 程序的博文: Linking Golang Statically

它说:

But for that example, we just have to add the '-static' flag to gcc (and ensure that glibc-static package is available).

这意味着您的 C 库也需要静态链接。

关于go - 静态链接 stdlib.so,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39526650/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com