尝试编译 ROS 包时解决 GLIBC 错误
Solving GLIBC errors while trying to compile a ROS package
我在我的 anaconda 环境中安装了 ROS-noetic。为此,我正在使用 robostack 提供的 ROS 系统。我正在尝试构建一个 ros 包 (https://github.com/johnkok/ros_odrive)。但是,当我尝试构建包时,出现以下错误:
/home/anaconda3/envs/rosenv2/bin/../lib/gcc/x86_64-conda-linux-gnu/9.4.0/../../../../x86_64-conda-linux-gnu/bin/ld: /home/anaconda3/envs/rosenv2/lib/libudev.so.1: undefined reference to 'name_to_handle_at@GLIBC_2.14'
/home/anaconda3/envs/rosenv2/bin/../lib/gcc/x86_64-conda-linux-gnu/9.4.0/../../../../x86_64-conda-linux-gnu/bin/ld: /home/anaconda3/envs/rosenv2/lib/libusb-1.0.so: undefined reference to 'memcpy@GLIBC_2.14'
/home/anaconda3/envs/rosenv2/bin/../lib/gcc/x86_64-conda-linux-gnu/9.4.0/../../../../x86_64-conda-linux-gnu/bin/ld: /home/anaconda3/envs/rosenv2/lib/libudev.so.1: undefined reference to 'secure_getenv@GLIBC_2.17'
/home/anaconda3/envs/rosenv2/bin/../lib/gcc/x86_64-conda-linux-gnu/9.4.0/../../../../x86_64-conda-linux-gnu/bin/ld: /home/anaconda3/envs/rosenv2/lib/libudev.so.1: undefined reference to 'getauxval@GLIBC_2.16'
/home/anaconda3/envs/rosenv2/bin/../lib/gcc/x86_64-conda-linux-gnu/9.4.0/../../../../x86_64-conda-linux-gnu/bin/ld: /home/anaconda3/envs/rosenv2/lib/libusb-1.0.so: undefined reference to 'clock_gettime@GLIBC_2.17'
collect2: error: ld returned 1 exit status
当我做 ldd --version
我得到 ldd (GNU libc) 2.12
.
关于如何解决这个问题有什么建议吗?谢谢!
I am using the ROS system offered by robostack for this.
ROS 包是针对 GLIBC 2.17(或更新版本)编译和链接的。它将仅在具有 GLIBC 2.17(或更新版本)的系统上工作。
I get ldd (GNU libc) 2.12
您正在尝试在 GLIBC 太旧的系统上使用 ROS。
how to solve this issue?
您有多种选择:
- 将您的 OS 升级到不那么古老的东西(GLIBC-2.17 大约在 10 年前发布)
- 找到与您的 OS
兼容的 ROS 软件包
- 从源代码在您的系统上重建 ROS 包(如果 ROS 依赖于较新的 GLBC 功能或较新的编译器,这可能很重要)
- 运行 在具有较新 GLIBC
的 docker 容器中
我在我的 anaconda 环境中安装了 ROS-noetic。为此,我正在使用 robostack 提供的 ROS 系统。我正在尝试构建一个 ros 包 (https://github.com/johnkok/ros_odrive)。但是,当我尝试构建包时,出现以下错误:
/home/anaconda3/envs/rosenv2/bin/../lib/gcc/x86_64-conda-linux-gnu/9.4.0/../../../../x86_64-conda-linux-gnu/bin/ld: /home/anaconda3/envs/rosenv2/lib/libudev.so.1: undefined reference to 'name_to_handle_at@GLIBC_2.14'
/home/anaconda3/envs/rosenv2/bin/../lib/gcc/x86_64-conda-linux-gnu/9.4.0/../../../../x86_64-conda-linux-gnu/bin/ld: /home/anaconda3/envs/rosenv2/lib/libusb-1.0.so: undefined reference to 'memcpy@GLIBC_2.14'
/home/anaconda3/envs/rosenv2/bin/../lib/gcc/x86_64-conda-linux-gnu/9.4.0/../../../../x86_64-conda-linux-gnu/bin/ld: /home/anaconda3/envs/rosenv2/lib/libudev.so.1: undefined reference to 'secure_getenv@GLIBC_2.17'
/home/anaconda3/envs/rosenv2/bin/../lib/gcc/x86_64-conda-linux-gnu/9.4.0/../../../../x86_64-conda-linux-gnu/bin/ld: /home/anaconda3/envs/rosenv2/lib/libudev.so.1: undefined reference to 'getauxval@GLIBC_2.16'
/home/anaconda3/envs/rosenv2/bin/../lib/gcc/x86_64-conda-linux-gnu/9.4.0/../../../../x86_64-conda-linux-gnu/bin/ld: /home/anaconda3/envs/rosenv2/lib/libusb-1.0.so: undefined reference to 'clock_gettime@GLIBC_2.17'
collect2: error: ld returned 1 exit status
当我做 ldd --version
我得到 ldd (GNU libc) 2.12
.
关于如何解决这个问题有什么建议吗?谢谢!
I am using the ROS system offered by robostack for this.
ROS 包是针对 GLIBC 2.17(或更新版本)编译和链接的。它将仅在具有 GLIBC 2.17(或更新版本)的系统上工作。
I get
ldd (GNU libc) 2.12
您正在尝试在 GLIBC 太旧的系统上使用 ROS。
how to solve this issue?
您有多种选择:
- 将您的 OS 升级到不那么古老的东西(GLIBC-2.17 大约在 10 年前发布)
- 找到与您的 OS 兼容的 ROS 软件包
- 从源代码在您的系统上重建 ROS 包(如果 ROS 依赖于较新的 GLBC 功能或较新的编译器,这可能很重要)
- 运行 在具有较新 GLIBC 的 docker 容器中