专有软件 Stata 版本 14 在 LTS 16.04 上运行良好,但我犯了一个错误,将 Ubuntu 升级到 16.10,而没有考虑到专有软件(Stata 是我唯一的软件)可能会崩溃。我无法降级。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
答案1
您的符号链接无法工作,因为您正在创建指向 i386 库的链接,而该链接通常用于搜索 amd64 库。为一种架构 (amd64) 编译的可执行文件无法加载为另一种架构 (i386) 编译的共享库。
你可以诱使 Stata 使用 libpng16 而不是 libpng12,只要确保它适用于相同的架构作为 Stata 可执行文件本身。我假设后者适用于 amd64(考虑到错误消息抱怨无效的 ELF 类,ELFCLASS32
该类仅用于 i386 指令集)。
看起来 Stata 明确检查了 libpng 版本,因此上面描述的技巧以及下面基于它的两种解决方案将不起作用。请参阅更好的解决方案反而。
快速而肮脏的解决方案
伪装libpng16.so.16
成libpng12.so.0
全部amd64 可执行文件:
sudo ln -sfT libpng16.so.16 /usr/lib/x86_64-linux-gnu/libpng12.so.0
仍然很脏,但未来惊喜较少
libpng16.so.16
仅对选定的可执行文件进行伪装libpng12.so.0
(从而消除了其他应用程序错误地拾取伪造文件的风险libpng12.so.0
):
为“伪装”共享库创建一个目录,例如:
sudo mkdir -p /usr/local/lib/stata/shared-library-hack
将指向屏蔽共享库的符号链接放入其中:
sudo ln -s /usr/lib/x86_64-linux-gnu/libpng16.so.16 /usr/local/lib/stata/shared-library-hack/libpng12.so.0
使用修改后的库搜索路径运行该程序:
LD_LIBRARY_PATH=/usr/local/lib/stata/shared-library-hack [COMMAND] [ARGUMENTS...]
或者如果您想保留库搜索路径中可能存在的更改:
LD_LIBRARY_PATH="${LD_LIBRARY_PATH:+"${LD_LIBRARY_PATH}:"}/usr/local/lib/stata/shared-library-hack" [COMMAND] [ARGUMENTS...]
如果您不想每次启动这样的应用程序时都输入这么长的命令,您可以使用 shell 脚本包装器或相应地编辑应用程序启动器描述(即文件Exec=
中的节.desktop
)。
更好的解决方案
实际安装libpng12.so.0
。最简单的方法是下载并安装早期 Ubuntu 版本的 Deb 包:
去https://packages.ubuntu.com/xenial/amd64/libpng12-0/download,选择一个镜像并下载软件包档案。
使用您最喜欢的包管理器来安装包档案。
您可以在命令行中使用:
sudo apt install [DOWNLOAD-PATH]/libpng12-0_*_amd64.deb
(将其替换
[DOWNLOAD-PATH]
为您之前用作下载目标目录的路径。)
这是不是一个合适的解决方案,因为的更新
libpng12
(包括安全更新)不会自动安装,所以这样做会带来安全风险。–fkraiem 2017 年 12 月 8 日 4:36
答案2
以下是更简单/紧凑的答案:
这是在 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
。点击此文件,或使用类似
gnome-open ~/Downloads/libpng12-0_1.2.54-1ubuntu1_amd64.deb
并点击安装按钮。
现在 Stata14 及其 xstata 可以正常启动。菜单中将缺少图标,但其他一切似乎都运行正常。