Linux:在Docker容器中找不到现有的共享库

亚历克斯44

我尝试在docker容器中设置FastRTPS。我写了一个Dockerfile,它构建了FastRTPS,它是源代码的依赖关系,并安装了库和提供的示例。但是这些示例不起作用:

/opt# /usr/local/examples/C++/HelloWorldExample/bin/HelloWorldExample 
/usr/local/examples/C++/HelloWorldExample/bin/HelloWorldExample: error while loading shared libraries: libfastrtps.so.1: cannot open shared object file: No such file or directory

由于这些库是在此容器中构建并自动安装的,因此它必须在某个位置,并且它们位于以下位置:

root@6e544f0699cf:/opt# ls -la /usr/local/lib/
total 9196
drwxr-xr-x 1 root root     4096 Mar 26 22:02 .
drwxr-xr-x 1 root root     4096 Mar 26 22:02 ..
drwxr-xr-x 3 root root     4096 Mar 26 22:00 cmake
drwxr-xr-x 3 root root     4096 Mar 26 22:00 foonathan_memory
lrwxrwxrwx 1 root root       15 Mar 26 22:00 libfastcdr.so -> libfastcdr.so.1
lrwxrwxrwx 1 root root       20 Mar 26 22:00 libfastcdr.so.1 -> libfastcdr.so.1.0.12
-rw-r--r-- 1 root root    99504 Mar 26 22:00 libfastcdr.so.1.0.12
lrwxrwxrwx 1 root root       16 Mar 26 22:02 libfastrtps.so -> libfastrtps.so.1
lrwxrwxrwx 1 root root       21 Mar 26 22:02 libfastrtps.so.1 -> libfastrtps.so.1.10.0
-rw-r--r-- 1 root root  8133952 Mar 26 22:01 libfastrtps.so.1.10.0
-rw-r--r-- 1 root root  1158048 Mar 26 22:00 libfoonathan_memory-0.6.2.a
drwxrwsr-x 3 root staff    4096 Mar 26 21:37 python3.7

也可以查看此库# nm -D /usr/local/lib/libfastrtps.so.1

但是的输出ldconfig有点奇怪:

# ldconfig -v | grep /usr/local/lib
ldconfig: Can't stat /usr/local/lib/x86_64-linux-gnu: No such file or directory
ldconfig: Path `/lib/x86_64-linux-gnu' given more than once
ldconfig: Path `/usr/lib/x86_64-linux-gnu' given more than once
ldconfig: /lib/x86_64-linux-gnu/ld-2.28.so is the dynamic linker, ignoring

/usr/local/lib:

我在这里期望列出的库,但不是。

如何解决?


在构建FastRTPS时,编辑1从make输出中提取的内容:

...
-- Installing: /usr/local/lib/libfastrtps.so.1.10.0
-- Installing: /usr/local/lib/libfastrtps.so.1
-- Installing: /usr/local/lib/libfastrtps.so
...
-- Installing: /usr/local/examples/C++/HelloWorldExample/bin/HelloWorldExample
-- Set runtime path of "/usr/local/examples/C++/HelloWorldExample/bin/HelloWorldExample" to ""

为什么将运行时路径设置为""-无?

亚历克斯44

最后的编辑导致了问题以及解决方案。

CMake删除RPATH在码头工人容器内的使用的情况下,该汽提是没有意义的,并如在此描述的可以被关闭通过加入这一论点到CMake的配置呼叫:

-DCMAKE_INSTALL_RPATH_USE_LINK_PATH=TRUE

最后,我的Dockerfile如下所示:

FROM fastrtps-core

WORKDIR /opt
RUN git clone https://github.com/eProsima/Fast-RTPS.git && \
    export LDFLAGS="-Wl,--copy-dt-needed-entries" && \
    mkdir build && \
    cd build && \
    cmake ../Fast-RTPS/examples \
        -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=TRUE && \
    cmake --build . --target install -j 16 && \
    cd /opt && \
    rm -rf build Fast-RTPS

现在,安装步骤输出显示了正确的运行时路径设置:

-- Installing: /usr/local/examples/C++/HelloWorldExample/HelloWorldExample
-- Set runtime path of "/usr/local/examples/C++/HelloWorldExample/HelloWorldExample" to "/usr/local/lib"

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ld找不到现有的库

来自分类Dev

在数组中找不到现有的键

来自分类Dev

从现有的Docker容器中删除端口绑定

来自分类Dev

找不到现有的视图模板

来自分类Dev

Linux-找不到共享库

来自分类Dev

链接器找不到现有库

来自分类Dev

在配置过程中找不到现有的程序包

来自分类Dev

Docker配置找不到现有文件?

来自分类Dev

mpd找不到现有的音乐文件

来自分类Dev

使用Ansible停止所有现有的Docker容器

来自分类Dev

Python在cron中找不到共享库

来自分类Dev

如何将用户现有的.ssh目录挂载到Docker容器中?

来自分类Dev

我可以将现有的Docker容器导出到Dockerfile中吗?

来自分类Dev

如何在现有的Docker容器中永久设置环境变量?

来自分类Dev

在已提交的Docker映像中找不到在Docker容器中创建的数据库和集合

来自分类Dev

打开现有的 nvidia-docker 容器

来自分类Dev

在Docker容器中找不到文件

来自分类Dev

在Docker容器中找不到依赖项

来自分类Dev

钢筋eunit在erlang:latest docker容器中找不到包含库

来自分类Dev

Linux:可执行文件找不到共享库

来自分类Dev

ld找不到共享库

来自分类Dev

g ++找不到共享库

来自分类Dev

Cython找不到共享库

来自分类Dev

ld 找不到共享库

来自分类Dev

docker-compose在Docker for Mac中找不到服务或容器

来自分类Dev

Docker:将新的postgres容器重新连接到现有的Data容器

来自分类Dev

在Docker容器中添加GPG密钥会导致“找不到有效的OpenPGP数据”

来自分类Dev

Docker容器:找不到lsmod

来自分类Dev

在与CMakeLists.txt相同的目录中找不到共享库