Solving GLIBC errors while trying to compile a ROS package - ros

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!

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

Related

Issue building OpenCV with ccache and CUDA

Trying to build OpenCV 3.3.1 with CUDA support, using ccache:
Ubuntu 16.04 LTS
OpenCV 3.3.1
CUDA 8.0
CCACHE 3.2.4
Make fails for .cu files, giving error:
/usr/bin/ccache: invalid option -- 'E'
Usage:
ccache [options] ...
I've added the /usr/lib/ccache to PATH, which cc and which c++ outputs /usr/lib/ccache/cc and /usr/lib/ccache/c++ respectively. Manually added a symlink for nvcc in /usr/lib/ccache directory, but now OpenCV CMakeLists.txt cannot find CUDA.
But interestingly I can build this sample CUDA code, with this CMake file without any issue.
I've searched the net and read most posts on SO and other forums, but had no success. I've had this issue for previous versions of OpenCV as well, but always disabled ccache as a solution.
Can someone please explain the reason behind this error?
Trying to set
-DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda
seems to solve this problem for me.

Can't install Phidgets ROS driver

I have installed the Phidgets libraries following the following link and the "Hello World" example was working, but when I install the Phidgets ROS driver, I get this error:
fatal error: libphidgets/phidget21.h: No such file or directory compilation terminated.
What's causing this? The libraries have been installed by the Linux driver, right?
Phidgets, in their infinite wisdom desired to abandon the "phidget21" architecture and now have a completely different and incompatible phidgets22 driver architecture. When you installed the libraries from their web site, you can only get the version 22 driver architecture :( -- hint, version 21 is still out there on GitHub, so if you go find it, download and install everything should work as expected. Someone will need to migrate all the ROS code to the newer version 22 architecture for this to work as expected.

OpenCV Crosscompile for ARM: highgui error (GTK2+)

I'm have build the OpenCV library from source for Zynq (ARM). But, OpenCV was build on the same PC for x86 (PC) also. Firstly, I can execute every example on my PC without any issues. Secondly, I am able to crosscompile and execute every program on the arm target, except the ones including highgui libraries, where I receive the following error:
OpenCV Error: Unspecified error (The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Carbon support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script) in cvShowImage, file /home/hristov/workspace/opencv/modules/highgui/src/window.cpp, line 534
terminate called after throwing an instance of 'cv::Exception'
what(): /home/user/workspace/opencv/modules/highgui/src/window.cpp:534: error: (-2) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Carbon support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script in function cvShowImage
Yes, I have gone through the forum for solutions for this issue but some answers were unclear and I would like some more detail into this. I have created the OpenCV build for ARM build WITH_GTK and GTK2. Also installed libgtk2.0-dev, pkg-config
However, From another topic on this forum, I learned that the problem lies in setting up the pkg-config: http://answers.opencv.org/question/57945/opencv-gui-with-gtk-2-solved/
Q) Based on the above solution, Do you set the path for PKG_CONFIG_PATH on your ARM platform (Zynq) or on the PC platform (Ubuntu PC)? Because, it is already set to the described path on the ARM platform whereas it is different on the PC Linux platform. More details of the current path is shown below:
PKG_CONFIG_PATH in PC(Ubuntu):
/usr/local/lib/x86_64-linux-gnu/pkgconfig:/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:/usr/lib/x86_64-linux-gnu/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig
PKG_CONFIG_PATH in ARM (Embedded platform):
/usr/local/lib/arm-linux-gnueabihf/pkgconfig:/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:/usr/lib/arm-linux-gnueabihf/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig
If the pkg-config must be changed on my PC, to the /usr/lib/arm-linux-gnueabihf/pkgconfig/ location, I cannot find any pkg-config in that location. Should I create a new one, by copying the folder from my target?
Q) Also, Should the GTK libraries also be installed in the Target Embedded system (ARM)?
Hope someone can help me with this solution as I have rebuild the libraries umpteen times with many different solutions, but to no avail. Thanks!

Undefined symbol ompi_mpi_info_null for HDF5 - Ubuntu 16.04

I was trying to compile a package in Ubuntu 16.04 that requires HDF5. When compiling HDF5 I encounter this problem:
ImportError: /usr/lib/x86_64-linux-gnu/libhdf5_openmpi.so.10: undefined symbol: ompi_mpi_info_null
Is this indicating that I don't have openMPI? Pretty sure I have that as well checked from synaptic... I have libopenmpi-dev and libopenmpi1.10 already installed...
ImportError looks like a Python error. What is the software stack that you are using?
Is your application code parallel? I suggest to make sure that both OpenMPI and HDF5 are up-to-date, use the serial version of HDF5 if parallel is not needed, install h5py (if that is what you are using).

Linux Version of Z3: Dependency On Old libgmp.so.3

Z3's dependency on libgmp.so.3 is unresolved in the linux package, leaving the user to provide this library. However, this library is very old and is not readily available.
Does anyone know a method for getting around this issue? I am currently running x86_64 and cannot get around this missing dependency without a great deal of hassle.
Is it possible the linux packages could be fixed such they include the expected library in the distribution?
You can get GMP3 by executing sudo apt install libgmp3-dev.
I'm not a Linux expert, but this is the command I used to install GMP before I compiled Z3.
When I installed the virtual machine for running Linux 64, I think I didn't find a package for the more recent versions of GMP.
I will try again. If it doesn't work, I will download the most recent GMP tar ball and build it from scratch.
BTW, the Z3 for Linux 32 comes with two .so files. One of them has GMP statically linked.
The trick I used for building this .so file didn't work for the 64 bit version.
As I said, I'm not a Linux expert, any suggestions on how to build a better Z3 library for Linux x86_64 users are welcome.

Resources