奇点和内部动态库
Singularity and interior dynamic libraries
我目前正致力于在 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
部分末尾添加了 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
也没用。
我的第一个猜测是您的本地环境正在覆盖图像中的变量。您可以使用 singularity run --cleanenv MyProject.img
来防止您当前的环境持久化到容器中。如果有您想要传递的变量,您可以export SINGULARITYENV_SOMEVAR=foo
在容器环境中设置SOMEVAR=foo
。
如果不行,请修改 %runscript
以在其中添加一个 env | sort
,这样当它尝试 运行 您的代码时,您可以准确地看到设置的内容。
我目前正致力于在 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
部分末尾添加了 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
也没用。
我的第一个猜测是您的本地环境正在覆盖图像中的变量。您可以使用 singularity run --cleanenv MyProject.img
来防止您当前的环境持久化到容器中。如果有您想要传递的变量,您可以export SINGULARITYENV_SOMEVAR=foo
在容器环境中设置SOMEVAR=foo
。
如果不行,请修改 %runscript
以在其中添加一个 env | sort
,这样当它尝试 运行 您的代码时,您可以准确地看到设置的内容。