Singularity container 奇点与内部动态库

Singularity container 奇点与内部动态库,singularity-container,Singularity Container,我目前正致力于在Singularity容器中获得一个更大的(C++)项目。到目前为止,一切都很好,直到我尝试执行容器映像,在该映像中找不到我以前在容器中构建的动态库文件: ./MyProject.img /<some path>/MyExecutable: error while loading shared libraries: libmongocxx.so._noabi: cannot open shared object file: No such file or direct

我目前正致力于在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
因此,我的下一个想法是,可能出于某种原因,基本库文件夹不是容器的环境变量的一部分,因此我扩展了
%post
部分

export PATH=$PATH:/usr/local/lib/
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/
还是没有用

我在这里遗漏了奇点容器的一些特性吗?是否需要以某种方式将动态库文件提取到容器外部?还是我犯了一些愚蠢的错误,我就是看不出来

(我现在只用代码>奇点容器< /代码>来标注问题,因为我认为这不是C++所特有的,但是如果有人认为可以自由添加。我的容器使用 Bootstrap:Duku: Ubuntu:18.04 < /Cord>,这应该是相关的)

编辑:我还明确赋予了动态库执行权限(以防万一),并打印了它们的权限:

lrwxrwxrwx  1 root root       20 Sep 10 10:51 libmongocxx.so._noabi -> libmongocxx.so.3.6.0

也不起作用。

我的第一个猜测是您的本地环境正在覆盖图像中的变量。您可以使用
singularity run--cleannev MyProject.img
防止当前环境持久化到容器中。如果确实要在其中传递变量,则可以
导出SINGULARITYENV_SOMEVAR=foo
以在容器环境中设置
SOMEVAR=foo


如果这样做不起作用,请修改
%runscript
,使其中包含
env | sort
,以便您可以确切地看到它在尝试运行代码时设置了什么。

我的第一个猜测是您的本地环境正在覆盖图像中的变量。您可以使用
singularity run--cleannev MyProject.img
防止当前环境持久化到容器中。如果确实要在其中传递变量,则可以
导出SINGULARITYENV_SOMEVAR=foo
以在容器环境中设置
SOMEVAR=foo


如果这样做不起作用,请修改
%runscript
以在其中设置
env | sort
,这样您就可以准确地看到它在尝试运行代码时设置了什么。

谢谢,
导出SINGULARITYENV\u LD\u库路径=/usr/local/lib/
成功了。谢谢,
export SINGULARITYENV\u LD\u LIBRARY\u PATH=/usr/local/lib/
成功了。
lrwxrwxrwx  1 root root       20 Sep 10 10:51 libmongocxx.so._noabi -> libmongocxx.so.3.6.0