如何为 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`的主要内容,如果未能解决你的问题,请参考以下文章