解决在Ubuntu系统下使用Lucid 相机(HTR003S-001)-Ubuntu 20.04系统遇到GLIBC和GLIBCXX版本不兼容的问题

https://blog.csdn.net/m0_46090849/article/details/159960343?sharetype=blogdetail&sharerId=159960343&sharerefer=PC&sharesource=m0_46090849&spm=1011.2480.3001.8118

上一篇文章讲解了如何在Ubuntu系统下使用Lucid相机,但是相关开发包以及ArenaView要求ubuntu 22.04和24.04系统,因此出现不兼容的问题。

这个错误的核心原因是,你下载的 ArenaViewMP 这个程序依赖的 C++ 和 C 标准库版本太高了,而你电脑里的版本却有点旧,导致程序无法正常启动。

Ubuntu 20.04 默认自带的 C 库(GLIBC)版本是 2.31,而 ArenaViewMP 需要的是 2.34 或更高版本。C++ 库(libstdc++.so.6)也是同理,系统版本(3.4.28)低于程序需要的 3.4.29/3.4.30

对于GLIBCXX_3.4.29 缺失的问题,可以通过升级C++库的方式

  1. 添加PPA并更新 :添加 ubuntu-toolchain-r 的测试源,可以获得更新版本的 GCC。

    bash

    复制代码
    sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
    sudo apt update
  2. 安装GCC 11 :安装 G++ 11,它会自动把需要的 libstdc++.so.6.0.29 库带进来。

    bash

    复制代码
    sudo apt install -y g++-11
  3. 验证安装 :检查一下系统里有没有 GLIBCXX_3.4.29 这个版本。

    bash

    复制代码
    strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep 'GLIBCXX_3.4.29'

    如果命令有输出,说明库已经成功升级,可以再次尝试运行 ArenaViewMP 了。

但是升级GLIBC,风险非常高。

glibc 是几乎所有程序都依赖的最底层核心库,强制升级它风险极高,很可能导致整个系统不稳定甚至崩溃。因此,强烈不建议在主力机器上尝试。

因此,采用Docker 容器进行解决

  1. 安装 Docker:首先需要安装 Docker,可以参考官方文档或使用以下命令:

    复制代码
    sudo apt update
    sudo apt install docker.io
  2. 创建并运行容器:拉取一个 Ubuntu 22.04 的镜像并进入其命令行。

    复制代码
    sudo docker run -it --name arena_env ubuntu:22.04 /bin/bash

你可能会遇到拉取镜像超时的错误,因此需要给给 Docker 配置一个国内镜像加速器

我尝试了很多,发现 https://docker.1ms.run 可用。

第一步:测试新镜像源是否可解析

先测试一下最推荐的 https://docker.1ms.run

复制代码
curl -I https://docker.1ms.run

如果能返回 200302 等状态码,说明网络可达。如果返回 curl: (6) Could not resolve host,说明你的 DNS 仍然有问题,需要先按我之前说的修改 DNS(改成 8.8.8.8)。

第二步:修改 Docker 配置文件

假设测试成功,执行以下命令写入新的配置(这里也提供了一些常见的镜像源,docker会不断尝试 建议都加上):

复制代码
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://docker.1ms.run",
    "https://docker.m.daocloud.io",
    "https://lispy.org",
    "https://docker-0.unsee.tech",
    "https://docker.xuanyuan.me"
  ]
}
EOF

第三步:重启 Docker

复制代码
sudo systemctl restart docker

第四步:验证配置生效

复制代码
sudo docker info | grep -A 5 "Registry Mirrors"

应该能看到你配置的这五个镜像源。

第五步:测试拉取镜像

复制代码
sudo docker pull ubuntu:22.04

如果成功拉取,说明镜像加速器工作正常。然后运行容器:

复制代码
sudo docker run -it --name arena_env ubuntu:22.04 /bin/bash

这个提示符 root@4f2aa0cf55c1:/# 表示你已经成功进入了一个正在运行的 Docker 容器内部

接下来,你需要在容器内运行 ArenaViewMP

你的主机上已经下载了 ArenaViewMP 的文件夹,但容器是隔离的,看不到主机上的文件。你需要把那个文件夹挂载到容器里。

方法一:退出当前容器,重新运行带挂载参数的容器
  1. 先退出当前容器 :输入 exit 回车。

  2. 删除旧容器 (因为名字 arena_env 已被使用):

    bash 复制代码
    sudo docker rm arena_env
  3. 在宿主机上允许图形连接

    bash 复制代码
    xhost +
  4. 重新创建容器(不带任何预先设置的环境变量)

    bash 复制代码
    sudo docker run -it --name arena_env \
      --network="host" \
      -v /home/yyg/下载/ArenaViewMP_v_1.0.0.10_Linux_x64:/opt/arena \
      -e DISPLAY=$DISPLAY \
      -v /tmp/.X11-unix:/tmp/.X11-unix \
      ubuntu:22.04 /bin/bash

5. 在容器内,先安装所有系统依赖(不要设置LD_LIBRARY_PATH)

bash 复制代码
apt install -y libasound2 libatk-bridge2.0-0 libgtk-3-0 libatomic1 libglib2.0-0 procps coreutils libnss3 libdrm2 libglx-mesa0 libgl1-mesa-glx libegl1 libopengl0 libglvnd0 libibverbs1 librdmacm1 libxcb-cursor0 libxcb-util1 libxcb-icccm4 libxcb-keysyms1 libxcb-randr0 libxcb-shape0 libxcb-shm0 libxcb-xfixes0 libxcb-xinerama0 libxcb-xkb1 libxcb-xv0 libxkbcommon-x11-0

6.切换到程序目录,此时才设置环境变量并运行程序

bash 复制代码
cd /opt/arena/ArenaSDK_Linux_x64/OutputDirectory/Linux/x64Release
export LD_LIBRARY_PATH=.:/opt/arena/ArenaSDK_Linux_x64/lib64:/opt/arena/ArenaSDK_Linux_x64/Metavision/lib:../../../GenICam/library/lib/Linux64_x64:../../../ffmpeg:../../../lib64:../../../Qt/lib
export LD_PRELOAD=libcef.so
export LANG=C.UTF-8
export LC_ALL=C.UTF-8
./ArenaViewMP

成功运行

为了能够方便运行,制作一个启动脚本

bash 复制代码
cat > /opt/arena/ArenaSDK_Linux_x64/OutputDirectory/Linux/x64Release/run_avmp1.sh << 'EOF'
#!/bin/bash
cd /opt/arena/ArenaSDK_Linux_x64/OutputDirectory/Linux/x64Release
export LD_LIBRARY_PATH=.:/opt/arena/ArenaSDK_Linux_x64/lib64:/opt/arena/ArenaSDK_Linux_x64/Metavision/lib:../../../GenICam/library/lib/Linux64_x64:../../../ffmpeg:../../../lib64:../../../Qt/lib
export LD_PRELOAD=libcef.so
export LANG=C.UTF-8
export LC_ALL=C.UTF-8
./ArenaViewMP
EOF

chmod +x /opt/arena/ArenaSDK_Linux_x64/OutputDirectory/Linux/x64Release/run_avmp1.sh

然后运行脚本即可:

bash 复制代码
/opt/arena/ArenaSDK_Linux_x64/OutputDirectory/Linux/x64Release/run_avmp1.sh

在退出之后,如果想进入创建的容器可以使用下面的命令

通过这个方式,查看所有已运行和未运行的docker,其中STATUS列为Exited,表示容器已停止,Up表示正在运行。

bash 复制代码
sudo docker ps -a

找到已创建的docker名称,若未运行,则先进行启动

bash 复制代码
sudo docker start arena_env        # 启动容器

进入容器

bash 复制代码
sudo docker exec -it arena_env /bin/bash   # 进入容器

进入相应的文件夹内

bash 复制代码
cd /opt/arena/ArenaSDK_Linux_x64/OutputDirectory/Linux/x64Release

运行相应程序

bash 复制代码
sh run_avmp1.sh
相关推荐
蓝天下的守望者10 小时前
svt_apb_if里的宏定义问题
运维·服务器·数据库
小林ixn10 小时前
从“玩具工具”到“跨语言利器”:MCP 协议实战解析
运维·服务器·网络
小顿的企业观察11 小时前
中企出海战略规划,正在从“走出去”转向“走进去”
大数据·运维·人工智能·产品运营·制造
数智化转型推荐官11 小时前
2026统一身份管理系统五大发展趋势解读
java·运维·微服务
看菜鸡互11 小时前
探索用 SlideML 让大模型生成 PPT 的实验方法
java·运维
大飞记Python13 小时前
Linux命令速查手册(测试开发4年实战总结,附PDF)
linux·网络·pdf
liguojun202514 小时前
篮球馆自动计时收费系统:从规则配置到自动结算的全流程拆解
java·大数据·运维·人工智能·物联网·1024程序员节
Promise微笑14 小时前
红外分辨率 160×120、320×240、384×288 与 640×480实战选型指南
大数据·运维·人工智能·物联网
拥抱太阳061614 小时前
HarmonyOS 应用开发《掌上英语》第2篇:ArkTS 模块化开发:Index.ets 统一导出模式深度解析
pytorch·ubuntu·harmonyos
顾喵15 小时前
PetaLinux 2017.4 实操指南:PREEMPT_RT实时补丁移植+Zynq PL中断UIO用户态配置(超完整避坑版)
linux