Undefined symbol ompi_mpi_info_null for HDF5 - Ubuntu 16.04 - hdf5

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).

Related

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!
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

Why cv_bridge uses OpenCV 3.2 in ROS Melodic?

I have OpenCV 3.4 installed in Ubuntu 18. I also have installed ROS Melodic according to the website instructions. However, I keep on getting an error that libopencv_core.so.3.2 is required.
I already set my CMakeLists files to point to OpenCV 3.4.
However, I found out that in the file:
/ros/melodic/share/cv_bridge/cmake/cv_bridgeConfig.cmake
there is the following line hardcoded in opencv3.2:
set(libraries "cv_bridge;/usr/lib/x86_64-linux-gnu/libopencv_core.so.3.2.0;/usr/lib/x86_64-linux-gnu/libopencv_imgproc.so.3.2.0;/usr/lib/x86_64-linux-gnu/libopencv_imgcodecs.so.3.2.0").
I tried to change it to 3.4 but I can not rebuild it.
The error I am getting is:
/opt/ros/melodic/lib/image_view/image_view: error while loading shared libraries: libopencv_core.so.3.2: cannot open shared object file: No such file or directory
Why is OpenCV 3.2 hardcoded in cv_bridge and how can I rebuild it with OpenCV 3.4?
Update:
I eventually installed OpenCV 3.2 and it worked properly.
Because opencv development speed is much faster than ROS individual module. And a lot of ROS modules went depreciated after someone left the job.
But that's by no means the end of the day( maybe end of the day for noobs). You can build it directly with any version of opencv core function(besides imshow kind of function) others should perform just fine.
The easiest way is to do is: in the console before executing catkin_make try to execute the following
export CMAKE_PREFIX_PATH=/usr/local:$CMAKE_PREFIX_PATH
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
This should give preference to your custom OpenCV installation when doing the find_package(OpenCV 3.X.0 REQUIRED). Then compile and use the function of that version.
Well if you do have to use 3.4 then I think you have to build ros version of opencv and image transport and cvbridge to the 3.4 if that's what you are targeting.
You can find the link here https://github.com/ros-gbp/opencv3-release The highest they provide seems to be 3.3

Cannot resolve symbol in libprotobuf in openwrt

I have cross compiled a client server program to be run on openwrt plattform
I have used protoc version 2.6.1 to generate the .pb.h and .pb.cc files.
I have installed he protobuf package for cross compilation using the this
I have linked the compiled protobuf libraries to the source while compiling.
But when I try to run the executable on the openwrt VM (chaos calmer) it gives me the following error.
symbol '_ZN6google8protobuf8internal13empty_string_B5cxx11E': can't
resolve the symbol in lib './opwenwrt-client'
error image
I can guess the that there is mismatch between linking library.
But I dont understand that everywhere I am using protobuf version 2.1.6.
Any kind of help would be appreciated.
This looks like it's probably caused by using a different compiler / C++ ABI to compile your application vs. libprotobuf.so. See this previous question for more:
Undefined reference to google::protobuf::internal::empty_string_[abi:cxx11]

How to install luagraph using luarocks

I'm trying to use luagraph, a binding to the graphviz library:
http://luagraph.luaforge.net/index.html
To install, I'm using luarocks in Mac OS X. The following command is executed in bash:
luarocks install luagraph
The output is the following:
Installing https://luarocks.org/luagraph-1.0.4-1.src.rock... Using
https://luarocks.org/luagraph-1.0.4-1.src.rock... switching to 'build'
mode
Error: Could not find expected file graphviz/graph.h, or
graphviz/graph.h for GRAPHVIZ -- you may have to install GRAPHVIZ in
your system and/or pass GRAPHVIZ_DIR or GRAPHVIZ_INCDIR to the
luarocks command. Example: luarocks install luagraph
GRAPHVIZ_DIR=/usr/local
I have been installed graphviz using homebrew, but I can't figure out how to pass GRAPHVIZ_DIR or GRAPHVIZ_INCDIR properly.
How can I install luagraph?
I've updated LuaGRAPH a couple of weeks ago. It now supports the newest version of Graphviz based on the cgraph library instead of the old graph library.
There is one drawback: I couldn't get luagraph to run on Windows using mingw because of some runtime library issues (compiler and dll compatibility probably). Please look at the README file for more details.
I personally never produced a rockspec for this module. This was created by someone else based on a fork of my luagraph library.
Installation without Luarocks is simple. Download from
https://github.com/hleuwer/luagraph
and follow the instruction in the documentation and the README file. You need adopt a simple config file which is included by make.
Herbert
Well, luaGRAPH is still the top result when searching for lua and graph. So the question is still standing.
And, unfortunately, the answer is: luagraph is OLD, the last update happened before the ubuntu 14.04 was released. And there seem to be some notable changes in the system itself, the flags the error message show do not seem to work. On top of that, graphviz is now about 20 releases newer than the luarock recommends.
There now is a bare bone alternative lua package: graphviz
It is extremely basic, and documentation in not at all informative, but at least it works.
update: Luagraph may be working again, but not through rocks. See the other answer.

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