事实
我在运行 Ubuntu 12.04 LTS 的桌面上安装了metis 5.1.0 。
最近编译了一个并行配置的软件,找不到文件/opt/metis/metis-5.1.0/lib/libmetis.a ,报了致命错误。
这对我来说看起来很奇怪,因为使用相同软件的早期版本和现有的 metis 安装一切都很好。
libmetis.a 的消失
不过,我有证据表明libmetis.a已从第一个 metis 安装的 stderr+stout 文件中安装。例如,从输出中的某处make install
我可以看到:
/usr/bin/cmake -P cmake_install.cmake
-- Install configuration: ""
-- Installing: /opt/metis/metis-5.1.0/include/metis.h
-- Installing: /opt/metis/metis-5.1.0/lib/libmetis.a
-- Installing: /opt/metis/metis-5.1.0/bin/gpmetis
因此,某些操作必须在某个时候删除了 libmetis.a。我不记得或不知道哪个行动可以做到这一点。
重新安装metis
然后我通过运行我第一次使用的相同脚本重新安装了相同版本的 metis。程序是
sudo make uninstall
sudo make clean
sudo make config prefix=/opt/metis/metis-5.1.0 shared=1 cc=gcc gdb=1 debug=1
sudo make
sudo make install
stdout+sterr 中的相应行已更改
/usr/local/bin/cmake -P cmake_install.cmake
-- Install configuration: ""
-- Installing: /opt/metis/metis-5.1.0/include/metis.h
-- Installing: /opt/metis/metis-5.1.0/lib/libmetis.so
-- Installing: /opt/metis/metis-5.1.0/bin/gpmetis
比较
- cmake生活在另一条道路上。我想不起这样做的原因。我确实确认当前 cmake 已安装在 /usr/local/bin/cmake 中,并且 /usr/bin/cmake 不再存在。无论哪种方式,从那时起,cmake 的版本一直是 3.3.1(我相信)。
- 安装libmetis.so而不是libmetis.a。
make install
逐行对比新旧stderr+stdout,发现cmake在第一次安装的时候已经搞的比较多。不幸的是,我已经覆盖了第一次安装的文件,无法提供更多细节。
概括
总结一下我注意到的变化是
- 静态库libmetis.a消失了(盲点为什么/如何/何时)
- cmake被取代(盲目的为什么/如何/何时)
- metis 的山寨安装导致共享对象库libmetis.so而不是 libmetis.a,可能是在使用不同的 cmake 之后。我
shared=1
怀疑地在 config 命令中看到了这一点,但使用脚本是为了忠实地重复所有操作。(虽然并不总是正确编码好的意图。)
目的是按照并行软件的要求,重新放置 libmetis.a 文件。
任何建议提示和智慧来解决这个问题?提前感谢您的思考。