如何为 Alpine Linux 中的进程提供`__snprintf_chk`

Posted

技术标签:

【中文标题】如何为 Alpine Linux 中的进程提供`__snprintf_chk`【英文标题】:How to provide `__snprintf_chk` to a process in Alpine Linux 【发布时间】:2018-07-14 09:47:22 【问题描述】:

我已经编译了一个 PostgreSQL 插件,wal2json,但是当尝试在 PostgreSQL 中加载它时,它会报错:

错误:无法加载库“/usr/local/lib/postgresql/wal2json.so”:重新定位 /usr/local/lib/postgresql/wal2json.so 时出错:__snprintf_chk:找不到符号

我找到了__snprintf_chk 的文档。

它在哪里,我应该怎么做才能将它提供给插件?

我的猜测是它在某个核心库中,但在我拥有的版本中不存在。也许我可以静态链接它?


更新:我发现这是 Alpine Linux 的问题,它使用 musl 而不是 glibc。 我已经为 glibc 安装了 Alpine 软件包,就像在 https://github.com/jeanblanchard/docker-alpine-glibc/blob/master/Dockerfile 中所做的那样。没有帮助,仍然是同样的错误。

【问题讨论】:

从文档中它似乎在 glibc 中。 我遇到了与node-gdal 类似的问题,并由building GDAL linking against shared libraries 解决。 【参考方案1】:

我切换到另一个基础 Docker 映像,Ubuntu。 结果是更大的图像,但__snprintf_chk 可用并且有效。

另外,PostgreSQL 有一个 Docker 镜像,它已经有 wal2json 可用,我最终将它用于生产。

【讨论】:

是的,我知道,这不是一个真正的解决方案,但我只有一个。我认为这仍然是一个有效的答案,它可以让人们花费几个小时的时间来尝试。除非有人带来更好的东西。

以上是关于如何为 Alpine Linux 中的进程提供`__snprintf_chk`的主要内容,如果未能解决你的问题,请参考以下文章

Alpine Linux 中的 apk 命令讲解

如何为php中的任何数组提供索引

alpine-linux gsecurity 安全

如何为我的 ios 推送通知提供商续订 SSL 证书?

如何为多处理池中的单个进程分配 python 请求会话?

如何为 Windows 中的进程分配超过 2GB 的内存?