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

2024-02-15

我尝试在 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:

在这里,我期望列出库,但它们没有。

如何解决这个问题?


编辑1 构建 FastRTPS 时从 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 ""

为什么运行时路径设置为""- 没有什么?


最后的编辑导致了这个问题,也导致了解决方案。

CMake 删除了RPATH。如果在 docker 容器内使用,这种剥离没有意义,可以按照本节中的描述关闭post https://stackoverflow.com/questions/32469953/why-is-cmake-designed-so-that-it-removes-runtime-path-when-installing通过将此参数添加到 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"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux:在 docker 容器中找不到现有共享库 的相关文章

  • Docker 和 Eureka 与 Spring Boot 无法注册客户端

    我有一个使用 Spring Boot Docker Compose Eureka 的非常简单的演示 我的服务器在端口 8671 上运行 具有以下应用程序属性 server port 8761 eureka instance prefer i
  • gdb查找行号的内存地址

    假设我已将 gdb 附加到一个进程 并且在其内存布局中有一个文件和行号 我想要其内存地址 如何获取文件x中第n行的内存地址 这是在 Linux x86 上 gdb info line test c 56 Line 56 of test c
  • docker 容器无法启动,因为现有的 pid 文件

    当我启动 docker 容器时 它会失败 因为现有的 pid 文件 root newhope sergio docker logs sharp shockley httpd pid 1 already running httpd pid 1
  • 从 Python 调用 PARI/GP

    我想打电话PARI GP http pari math u bordeaux fr dochtml gpman html仅从Python计算函数nextprime n 对于不同的n是我定义的 不幸的是我无法得到帕里蟒蛇 http code
  • Linux中的定时器类

    我需要一个计时器来以相对较低的分辨率执行回调 在 Linux 中实现此类 C 计时器类的最佳方法是什么 有我可以使用的库吗 如果您在框架 Glib Qt Wx 内编写 那么您已经拥有一个具有定时回调功能的事件循环 我认为情况并非如此 如果您
  • 使用 Docker 文件分配附加功能

    我需要部署 Docker 映像 但我只想使用 Docker run 命令而不使用其任何参数 我想在运行容器时分配特殊权限 这是我的 Docker 运行命令 docker run cap add SYS ADMIN cap add DAC R
  • 加载数据infile,Windows和Linux的区别

    我有一个需要导入到 MySQL 表的文件 这是我的命令 LOAD DATA LOCAL INFILE C test csv INTO TABLE logs fields terminated by LINES terminated BY n
  • 如何有效截断文件头?

    大家都知道truncate file size 函数 通过截断文件尾部将文件大小更改为给定大小 但是如何做同样的事情 只截断文件的尾部和头部呢 通常 您必须重写整个文件 最简单的方法是跳过前几个字节 将其他所有内容复制到临时文件中 并在完成
  • 适用于elasticsearch 7.0.1 和 kibana 7.0.1 的 docker-compose.yml

    我在 Windows 10 上将 Docker Desktop 与 Linux 容器结合使用 并希望通过 docker compose 文件启动最新版本的 elasticsearch 和 kibana 容器 使用 6 2 4 等旧版本时一切
  • 如何判断我是否通过脚本登录到私有 Docker 注册表?

    如何判断我是否通过脚本登录到私有 Docker 注册表服务器 换句话说 有docker login some registry com已成功运行 并且仍然有效 注意 我问的是任意私有注册表 而不是docker io注册表 如果 docker
  • 如何使用GDB修改内存内容?

    我知道我们可以使用几个命令来访问和读取内存 例如 print p x 但是如何更改任何特定位置的内存内容 在 GDB 中调试时 最简单的是设置程序变量 参见GDB 分配 http sourceware org gdb current onl
  • Linux 内核标识符中前导和尾随下划线的含义是什么?

    我不断遇到一些小约定 比如 KERNEL Are the 在这种情况下 是内核开发人员使用的命名约定 还是以这种方式命名宏的语法特定原因 整个代码中有很多这样的例子 例如 某些函数和变量以 甚至 这有什么具体原因吗 它似乎被广泛使用 我只需
  • 在 Ubuntu 18.04 上安装 Docker? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我检查了 Ubuntu 上 Docker 的文档页面 没有看到最近发布的 18 04 https docs docker com inst
  • NPTL 和 POSIX 线程有什么区别?

    NPTL 和 POSIX 线程之间的基本区别是什么 这两者是如何演变的 POSIX 线程 pthread 不是一个实现 它是几个函数的 API 规范 纸上的标准 英文 其名称以pthread 以及定义在
  • docker 容器是否即时获取代码更改?

    我已经启动并运行了我的 docker 容器 有一个容器运行一些 python 代码 我发现它导致了一些错误 我想将一些代码行 主要是更多日志 添加到该特定容器内的 python 脚本中 我想进入容器docker exec ti contai
  • Windows 上的 boot2docker 缺少 apt-get / 包管理器

    我在 boot2docker 中 我不确定我完全理解它 但它似乎是我正在进行的项目所需要的 我已经通过 ssh 登录了 并且尝试对我们的项目进行 make 但是我得到了 make not found 然后我尝试了一个 apt get ins
  • 如何管理AWS ECS中docker镜像的版本?

    AWS ECS 服务指向一个任务定义 其中包含 docker 镜像的名称 包括标签 因此 当我创建新版本的 docker 映像时 我有两种可能性 将任务定义更新到新版本 然后更新服务以指向任务定义的新版本 使用一些标签指向最后一个版本 假设
  • 如何物理删除未标记的 docker 镜像

    当我运行 sudo docker rmi me myimage 等命令时 我得到响应 image untagged 但是 当我重新运行 sudo docker images 时 我可以看到这个 untagged 图像仍然存在 并且 如果我运
  • 有谁知道在哪里定义硬件、版本和序列号。 /proc/cpuinfo 的字段?

    我想确保我的 proc cpuinfo 是准确的 目前它输出 Hardware am335xevm Revision 0000 Serial 0000000000000000 我可以在代码中的哪里更改它以给出实际值 这取决于 Linux 的
  • jpegtran 优化而不更改文件名

    我需要优化一些图像 但不更改它们的名称 jpegtran copy none optimize image jpg gt image jpg 但是 这似乎创建了 0 的文件大小 当我对不同的文件名执行此操作时 大小仍然完全相同 怎么样 jp

随机推荐

  • Android GridView 有类别吗?

    是否可以使用类别或某种带有GridView在安卓中 我整理了一个简短的说明来说明我的想法 多谢 您可以使用粘性网格标题 http tonicartos github com StickyGridHeaders 直接使用库或作为模型来创建您自
  • 使用 mkl,加载共享库时出错:libmkl_intel_lp64.so

    我几乎是新使用的mkl图书馆 如果这看起来很愚蠢 请原谅 我尝试运行教程中的示例 here https software intel com en us node 529744 with ifort mkl dgemm example f
  • 使用现有数据导入 Magical Record

    我正在尝试使用Magical Record将数据导入到我的CoreData db 我正在实体工作Person眼下 A Person has firstName lastName personID属性 我知道我不需要 idString 我不在
  • 如何在不使用 DataContext 的情况下绑定到 Silverlight 中的本地属性?

    我有一个小问题 但发现了很多不同的 而且大多是模棱两可的答案 我有以下用户控件 我试图绑定到该控件中的公共属性 事件 每个人都说我必须使用数据上下文 但是 我真的不想这样做 我只想从控件的内部绑定到属性 XAML 要求是绑定必须是两种方式
  • UIActivityViewController 解雇 MailViewController

    我尝试通过 UIActivityViewController 发送电子邮件 它工作正常 但发送电子邮件后邮件视图不会被关闭 当用户按下 取消 按钮时 它也不会关闭 我可以做什么来解决这个问题 这是我使用过的代码 conf share vie
  • Java - 多个GSON?

    好的 我正在创建一个使用的应用程序JSON保存日期 我用了GSON as my JSON 处理器 是的 我知道如何使用Gson 我按照网络上的教程进行操作 问题是 Web 上的教程只保存 一个 json 数据 我的意思是 例如 Data1
  • 手动确认消息:Spring Cloud Stream Kafka

    我想要实现的场景是使用来自 Kafka 的消息 处理它 如果某些条件失败我不希望确认该消息 为此 我在 Spring Cloud Stream 参考文档中找到了 自动提交偏移量 处理消息后是否自动提交偏移量 如果设置为 false 则消息标
  • Android:如何动态使视图具有相同的高度

    我正在 Android 应用程序中制作一张表 现在我无法使视图具有相同的高度 有2个TextViews tmp name and tmp content在每一行中 的高度tmp content取决于的长度course description
  • GitHub Actions 工作流程语法未按预期工作

    我有一个 GitHub 工作流程 当文件按照 图案 abc 被修改 创建 据我了解 这意味着每当 位于以下开头的文件夹的某个子文件夹中的文件abc or 任何以以下内容开头的文件abc 修改后 应触发 GH 操作 然而 当我例如创建一个文件
  • 我可以使用 FluentMigrator 创建 nvarchar(MAX) 列吗?

    Using 流利迁移器 http code google com p fluentmigrator 默认创建一个Column using AsString 结果是nvarchar 255 有没有一种简单的方法 在我修改 FluentMigr
  • 如何将标量树枝过滤器映射到数组

    我有一个简单的浮点数数组 我需要将其显示为逗号分隔的字符串 arr join 是一个糟糕的解决方案 因为精度太低 for val in arr val number format 2 endfor 不好 因为末尾有多余的逗号 我想做这样的事
  • Python-生成特定自相关的数组

    我有兴趣生成一个长度为 N 的数组 或 numpy 系列 它将在滞后 1 处表现出特定的自相关性 理想情况下 我还想指定均值和方差 并从 多 正态分布中提取数据 但最重要的是 我想指定自相关 如何使用 numpy 或 scikit lear
  • 为什么我会收到“构造函数未定义”错误?

    为什么下面的代码会产生编译错误 构造函数AA 未定义 它不应该调用默认构造函数吗 public class A public A public class AA extends A public AA int aa public class
  • IPC::Run - 检测早产儿退出和关闭管道

    我想使用 IPC Run 通过孩子的 STDIN STDOUT 和 STDERR 开始 泵送 完成 与孩子进行通信 似乎有效 我想知道如何检测 儿童过早退出 例如由错误引起 水管被孩子关闭 The pump抛出一个die出现错误时 或将其消
  • 如何在 Python 中从 URL 读取图像数据?

    当我们处理本地文件时 我想做的事情相当简单 但当我尝试使用远程 URL 来执行此操作时 问题就出现了 基本上 我正在尝试从从 URL 提取的文件创建 PIL 图像对象 当然 我总是可以只获取 URL 并将其存储在临时文件中 然后将其打开到图
  • 如何从生产中删除 console.log?

    如何从生产中删除所有 console log 此代码无法运行laravel mix 4 x webpack mix js mix js resources js app js public js if mix inProduction mi
  • android 无法启动模拟器:无法运行程序

    我已经在Ubuntu上成功安装了android SDK和android eclipse插件 一切都工作正常 直到我删除 Ubuntu 并安装 Linux Mint 我再次安装了 SDK 并使用了我在 Ubuntu 上使用的相同 Eclips
  • “未提供任何值的属性”错误 - UrlFetchApp

    我有以下错误 未提供任何值的属性 错误来自行 var content UrlFetchApp fetch url getContentText 这是我的代码 function getArray var newData new Array v
  • 在golang中一起执行bash echo和nc [重复]

    这个问题在这里已经有答案了 这可能是一个简单的问题 在 Linux 机器上工作 我正在尝试从go程序 我有一个服务器正在监听请求 但这行代码给我带来了问题 cmd exec Command echo n hello nc localhost
  • Linux:在 docker 容器中找不到现有共享库

    我尝试在 docker 容器内设置 FastRTPS 我编写了一个 Dockerfile 它从源代码构建 FastRTPS 及其依赖项 并安装库并提供示例 但这些例子不起作用 opt usr local examples C HelloWo