如何解决奇异性和内部动态库
我目前正在努力在Singularity容器中获得更大的(C ++)项目。到目前为止,一切工作正常,直到我尝试执行容器映像为止,在该映像中找不到以前在容器内构建的动态库文件:
./MyProject.img
/<some path>/MyExecutable: error while loading shared libraries: libmongocxx.so._noabi: cannot open shared object file: No such file or directory
我的第一个想法是,也许在容器内部建立这种依赖关系的过程没有成功,因此我在食谱的ls /usr/local/lib/
部分的末尾添加了%post
来检查这一点,但一切都很好:
+ ls /usr/local/lib/
[...]
libmongocxx.so
libmongocxx.so.3.6.0
libmongocxx.so._noabi
[...]
所以我的下一个想法是,由于某些原因,基本库文件夹可能不是容器环境变量的一部分,因此我用{p>扩展了%post
部分
export PATH=$PATH:/usr/local/lib/
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/
仍然无济于事。
在这里我缺少奇点容器的某些属性吗?我是否需要以某种方式将动态库文件提取到容器外部?还是我犯了一些愚蠢的错误,我在这里看不到?
(我暂时仅用singularity-container
标记了这个问题,因为我认为这不是C ++特有的,但是如果有人认为可以随意添加,我的容器将使用Bootstrap: docker From: ubuntu:18.04
,应该有关。)
编辑:为了以防万一,我还明确赋予了动态库执行权,并打印了它们的权利:
lrwxrwxrwx 1 root root 20 Sep 10 10:51 libmongocxx.so._noabi -> libmongocxx.so.3.6.0
也不起作用。
解决方法
我的第一个猜测是您的本地环境正在覆盖图像中的变量。您可以使用singularity run --cleanenv MyProject.img
来防止当前环境持久存在于容器中。如果您想在其中传递变量,可以export SINGULARITYENV_SOMEVAR=foo
在容器环境中设置SOMEVAR=foo
。
如果这样做没有效果,请修改%runscript
以在其中添加env | sort
,以便您可以在尝试运行代码时准确查看其设置。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。