我目前正在奇点容器中获得一个更大的(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部分的末尾添加了ls /usr/local/lib/来检查它,但是那里的一切都很好:
+ ls /usr/local/lib/
[...]
libmongocxx.so
libmongocxx.so.3.6.0
libmongocxx.so._noabi
[...]因此,我的下一个想法是,可能由于某种原因,基本库文件夹不是容器环境变量的一部分,所以我用以下方式扩展了%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也没起作用。
发布于 2020-09-10 12:32:07
我的第一个猜测是,您的本地环境正在覆盖图像中的变量。可以使用singularity run --cleanenv MyProject.img来防止当前环境持久化到容器中。如果您确实希望在其中传递变量,则可以在容器环境中进行export SINGULARITYENV_SOMEVAR=foo设置SOMEVAR=foo。
如果没有这样做,那么修改%runscript,使其在其中有一个env | sort,这样您就可以看到在试图运行您的代码时设置了什么。
https://stackoverflow.com/questions/63811603
复制相似问题