在 Ubuntu 系统上运行 Don’t Starve Together Dedicated Server(简称 DST 服务器)时,部分用户会遇到如下错误提示:
./dontstarve_dedicated_server_nullrenderer: error while loading shared libraries: libcurl-gnutls.so.4: cannot open shared object file: No such file or directory
这个错误意味着系统中缺少 libcurl-gnutls.so.4 这个共享库。本文将逐步分析这个问题的原因及其解决方法。
问题分析
libcurl-gnutls.so.4 是 libcurl 的一个构建版本,链接方式为 GnuTLS,而不是常见的 OpenSSL。在较新版本的 Ubuntu(如 22.04 或更高)中,该库不再默认安装。因此,尝试运行依赖该库的旧程序时,系统会报找不到该库。
安装缺失的库
可以通过以下命令安装 libcurl3-gnutls,该软件包中包含 libcurl-gnutls.so.4:
sudo apt update
sudo apt install libcurl3-gnutls
执行成功后,可通过以下命令确认库文件是否存在:
find / -name "libcurl-gnutls.so.4" 2>/dev/null
如果找到了该库的位置,例如 /usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.4,说明库已经正确安装。
仍然报错?可能是架构不匹配
如果安装了库仍然报错,有可能是因为 DST 服务器程序是 32 位 的,而默认安装的是 64 位 的库。
可使用以下命令检查服务器程序的架构:
file ./dontstarve_dedicated_server_nullrenderer
输出包含 ELF 32-bit 表示程序是 32 位的,这时需要安装对应的 32 位库版本。
启用 i386 架构并安装 32 位库
Ubuntu 默认不支持安装 32 位库,需要先启用 i386 架构:
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install libcurl3-gnutls:i386
此操作是安全的,不会破坏系统,仅会引入少量额外的 32 位库供需要的程序使用。Ubuntu 本身支持多架构(Multi-Arch),允许 32 位和 64 位库并存。
如需确认是否启用了 i386 架构:
dpkg --print-foreign-architectures
可选方案:手动指定库路径(高级用法)
如果系统中已存在 libcurl-gnutls.so.4,但仍无法被程序找到,可以尝试使用 LD_LIBRARY_PATH 临时指定库路径:
LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu ./start.sh
根据实际库文件所在路径调整上述命令。
清理或回退
如果后续不再需要 32 位支持,可以移除 i386 架构:
sudo dpkg --remove-architecture i386
sudo apt update
总结
| 问题 | 解决方法 |
|---|---|
缺失 libcurl-gnutls.so.4 | 安装 libcurl3-gnutls |
| 程序是 32 位 | 安装 libcurl3-gnutls:i386 |
| 找不到库但已安装 | 使用 LD_LIBRARY_PATH 指定路径或运行 ldconfig |
| 是否安全 | 启用 i386 架构是 Ubuntu 官方支持的操作,安全可靠 |
这种情况常见于运行旧游戏服务器或专用工具时。只要按上述步骤操作,即可安全解决兼容性问题,顺利启动 Don’t Starve Together 服务器。