Search code examples
rosglibcanaconda3

Solving GLIBC errors while trying to compile a ROS package


I have ROS-noetic installed in my anaconda environment. I am using the ROS suystem offered by robostack for this. I am trying to build a ros package (https://github.com/johnkok/ros_odrive). However, when I try to build the package, I get the following errors:

/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

When I do ldd --version I get ldd (GNU libc) 2.12.

Any suggestions on how to solve this issue? Thank you!


Solution

  • I am using the ROS system offered by robostack for this.

    The ROS package was compiled and linked against GLIBC 2.17 (or newer). It will only work on a system with GLIBC 2.17 (or newer).

    I get ldd (GNU libc) 2.12

    You are trying to use ROS on a system with GLIBC which is too old.

    how to solve this issue?

    You have several choices:

    • upgrade your OS to something less ancient (GLIBC-2.17 was released almost 10 years ago)
    • find an ROS package which is compatible with your OS
    • rebuild the ROS package on your system from source (this may be non-trivial if ROS depends on newer GLBC features, or newer compiler)
    • run in a docker container with newer GLIBC