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

How to provide `__snprintf_chk` to a process in Alpine Linux

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

ERROR: could not load library "/usr/local/lib/postgresql/wal2json.so": Error relocating /usr/local/lib/postgresql/wal2json.so: __snprintf_chk: symbol not found

我找到了 __snprintf_chk 的文档。

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

我的猜测是它在一些核心库中但不存在于我的版本中。也许我可以 link 它是静态的?


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

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

此外,PostgreSQL 有一个 Docker 图像,已经有 wal2json 可用,我最终将其用于生产。