专有软件 Stata 版本 14 在 LTS 16.04 上运行良好,但我犯了将 Ubuntu 升级到 16.10 的错误,而没有考虑专有软件(Stata 是我唯一的一个)可能会损坏的可能性。我不能降级。斯塔塔 说:
stata-se: error while loading shared libraries: libpng12.so.0: cannot open shared object file: No such file or directory
Stata 支持告诉我安装 libpng12。
所以我的问题是,我怎样才能安全地安装这个库并使这个库对 Stata 可用?(显然,即使使用库,Stata GUI 也无法完美运行,但该功能将可用。)
尝试 apt 给出:
E: 无法定位软件包 libpng12
libpng-dev
已安装,似乎不适合需要。
我认为Stata支持会告诉我这样的简单修复是否可行,但是在尝试用符号链接伪造它时,
sudo ln -s /usr/lib/i386-linux-gnu/libpng16.so.16.25.0 /usr/lib/i386-linux-gnu/libpng12.so.0
没有任何区别。
sudo ln -s /usr/lib/i386-linux-gnu/libpng16.so.16.25.0 /usr/lib/x86_64-linux-gnu/libpng12.so.0
给了:
stata-se: error while loading shared libraries: libpng12.so.0: wrong ELF class: ELFCLASS32
您的符号链接将不起作用,因为您正在创建指向 i386 库的链接,该链接位于通常搜索 amd64 库的路径中。为一种架构 (amd64) 编译的可执行文件无法加载为另一种架构 (i386) 编译的共享库。
如果您确保它与 Stata 可执行文件本身具有相同的体系结构,则可以欺骗 Stata 使用 libpng16 而不是 libpng12 。我假设后者适用于 amd64(考虑到错误消息抱怨无效的 ELF 类ELFCLASS32
仅用于 i386 指令集)。看起来 Stata 明确检查了 libpng 版本,所以上面描述的技巧以及下面基于它的两个解决方案将不起作用。请参阅更好的解决方案。
快速而肮脏的解决方案伪装所有amd64可执行文件
libpng16.so.16
:libpng12.so.0
仍然很脏,但未来的惊喜更少
仅对选定的可执行文件进行伪装
libpng16.so.16
(libpng12.so.0
从而消除其他应用程序libpng12.so.0
错误地获取虚假文件的风险):为“伪装”共享库创建一个目录,例如:
将屏蔽共享库的符号链接放入其中:
使用修改后的库搜索路径运行程序:
或者,如果您想保留对库搜索路径可能存在的更改:
如果您不想在每次启动此类应用程序时都输入如此长的命令,您可以使用 shell 脚本包装器或相应地编辑应用程序启动器描述(即文件Exec=
中的节.desktop
)。更好的解决方案
实际安装
libpng12.so.0
。最简单的方法是下载并安装早期 Ubuntu 版本的 Deb 包:转到https://packages.ubuntu.com/xenial/amd64/libpng12-0/download,选择一个镜像并下载包存档。
使用您最喜欢的包管理器来安装包存档。
在命令行上,您可以使用:
(替换
[DOWNLOAD-PATH]
为您之前用作下载目标目录的路径。)这是更简单/紧凑的答案:
这是在 64 位 Ubuntu 16.10 和 17.10 上针对 64 位 Stata 测试的(但似乎在 17.04 上失败了?)。简单地:
访问http://packages.ubuntu.com/xenial/amd64/libpng12-0/download并单击其中的任何镜像链接。这将下载
libpng12-0_1.2.54-1ubuntu1_amd64.deb
. 单击此文件,或使用类似的内容启动它并单击安装按钮。
现在 Stata14 及其 xstata 将正常启动。菜单中的图标将丢失,但其他一切似乎都正常。