Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

librtabmap_gui.so links to wrong library on make install #71

Closed
OAkyildiz opened this issue Apr 5, 2016 · 2 comments
Closed

librtabmap_gui.so links to wrong library on make install #71

OAkyildiz opened this issue Apr 5, 2016 · 2 comments

Comments

@OAkyildiz
Copy link

Hello,

I am trying to link rtabmap against Qt5 and I compiled VTK (6) and PCL with Qt5 as mentioned #6.

After I 'make install' to my workspace's devel folder, when I run rtabmap , I get a segfault.

$ valgrind ./path/to/rtabmap_ws/devel/bin/rtabmap -v

= Process terminating with default action of signal 11 (SIGSEGV)
==20273==  Bad permissions for mapped region at address 0x64EDC30
==20273==    at 0x1EE1FDFC: ??? (in /usr/lib/x86_64-linux-gnu/libQtGui.so.4.8.6)
==20273==    by 0x4010139: call_init.part.0 (dl-init.c:78)
==20273==    by 0x4010222: call_init (dl-init.c:36)
==20273==    by 0x4010222: _dl_init (dl-init.c:126)
==20273==    by 0x4001309: ??? (in /lib/x86_64-linux-gnu/ld-2.19.so)

$ ldd ./path/to/rtabmap_ws/devel/bin | grep Qt produces:

    libvtkGUISupportQt-6.3.so.1 => /usr/local/lib/libvtkGUISupportQt-6.3.so.1 (0x00007f2ab4eb3000)
    libQt5Widgets.so.5 => /opt/qt55/lib/libQt5Widgets.so.5 (0x00007f2ab3193000)
    libQt5Core.so.5 => /opt/qt55/lib/libQt5Core.so.5 (0x00007f2ab2c5e000)
    libQt5Gui.so.5 => /opt/qt55/lib/libQt5Gui.so.5 (0x00007f2ab26e9000)
    libQt5Svg.so.5 => /opt/qt55/lib/libQt5Svg.so.5 (0x00007f2ab2691000)
    libQt5PrintSupport.so.5 => /opt/qt55/lib/libQt5PrintSupport.so.5 (0x00007f2ab2620000)
    libQt5Test.so.5 => /opt/qt55/lib/libQt5Test.so.5 (0x00007f2a97317000)
    libQt5OpenGL.so.5 => /opt/qt55/lib/libQt5OpenGL.so.5 (0x00007f2a972be000)
    libQtGui.so.4 => /usr/lib/x86_64-linux-gnu/libQtGui.so.4 (0x00007f2a71c1d000)
    libQtCore.so.4 => /usr/lib/x86_64-linux-gnu/libQtCore.so.4 (0x00007f2a71738000)

So I tried the executable in the build path and it worked. So I tried
$ ldd ./path/to/rtabmap_ws/devel/bin | grep Qt, which returned:

    libQt5Widgets.so.5 => /opt/qt55/lib/libQt5Widgets.so.5 (0x00007fcf9af95000)
    libQt5Gui.so.5 => /opt/qt55/lib/libQt5Gui.so.5 (0x00007fcf9aa1f000)
    libQt5Core.so.5 => /opt/qt55/lib/libQt5Core.so.5 (0x00007fcf9a4ea000)
    libQt5Svg.so.5 => /opt/qt55/lib/libQt5Svg.so.5 (0x00007fcf9a493000)
    libQt5PrintSupport.so.5 => /opt/qt55/lib/libQt5PrintSupport.so.5 (0x00007fcf9a421000)
    libvtkGUISupportQt-6.3.so.1 => /usr/local/lib/libvtkGUISupportQt-6.3.so.1 (0x00007fcf97087000)
    libQt5Test.so.5 => /opt/qt55/lib/libQt5Test.so.5 (0x00007fcf7a303000)
    libQt5OpenGL.so.5 => /opt/qt55/lib/libQt5OpenGL.so.5 (0x00007fcf7a2a9000)

So somehow libQtGui.4 gets linked to librtabmap_gui.so only on install.

I tried both master and indigo-devel branches. I tried modifying CMakeLists.txt files:

For example,
I deleted the references to Qt4 and changed:

find_package(Qt5 ${qversion} REQUIRED Widgets Core Gui Svg)

into:

set(qversion 5.5.1)
        #find_package(Qt5 ${qversion} REQUIRED Widgets Core Gui Svg)
        find_package(Qt5Widgets ${qversion} REQUIRED COMPONENTS)
        find_package(Qt5Core ${qversion} REQUIRED)
        find_package(Qt5Gui ${qversion} REQUIRED)
        find_package(Qt5Svg ${qversion} REQUIRED)

Additionally, I changed instances of Qt5_FOUND to QT5Widgets_FOUND accordingly, since I've modified the call to find_package script.
As Qt 5.x CMake Guides say Qt5:: should be used instead of QT5_Libraries,
I put
(set QT_LIBRARIES Qt5::Widgets Qt5::Gui Qt5::Core Qt5::Svg) into the main CMakeLists.txt, since this was the variable used in linking Qt libraries trough out the package.

(Also, indigo-devel doesn't have an updated mappingRGBD.cpp since libfreenect2 made DepthPackageProcessor::Config implicit)

I will try to add build directory to LD_LIBRARY_PATH without make install as a workaround but I couldn't think of another (even temporary) solution.

Here is my $LD_LIBRARY_PATH, $CMAKE_PREFIX_PATH,$PKG_CONFIG_PATH and also the cmake command I used:

LD_LIBRARY_PATH=/home/oakyildiz/walrus_ws/devel/lib:/home/oakyildiz/walrus_ws/devel/lib/x86_64-linux-gnu:/home/oakyildiz/deps_workspace/install/lib/x86_64-linux-gnu:/opt/ros/indigo/lib/x86_64-linux-gnu:/home/oakyildiz/deps_workspace/install/lib:/opt/qt55/lib/cmake/lib:/opt/qt55/lib/cmake/lib/x86_64-linux-gnu:/opt/ros/indigo/lib:/opt/qt55/lib:/usr/local/cuda-7.5/lib64:/usr/local/lib:/usr/local/share/openrave-0.9/plugins

PKG_CONFIG_PATH=/opt/PCL1.7/lib/pkgconfig:/home/oakyildiz/walrus_ws/devel/lib/pkgconfig:/home/oakyildiz/walrus_ws/devel/lib/x86_64-linux-gnu/pkgconfig:/home/oakyildiz/deps_workspace/install/lib/x86_64-linux-gnu/pkgconfig:/opt/ros/indigo/lib/x86_64-linux-gnu/pkgconfig:/home/oakyildiz/deps_workspace/install/lib/pkgconfig:/opt/qt55/lib/cmake/lib/pkgconfig:/opt/qt55/lib/cmake/lib/x86_64-linux-gnu/pkgconfig:/opt/ros/indigo/lib/pkgconfig:/opt/qt55/lib/pkgconfig

CMAKE_PREFIX_PATH=/home/oakyildiz/walrus_ws/devel:/home/oakyildiz/deps_workspace/install:/opt/ros/indigo:/opt/qt55/lib/cmake

cmake -DCMAKE_PREFIX_PATH=/opt/VTK6/lib/cmake:$CMAKE_PREFIX_PATH -DCMAKE_INSTALL_PREFIX=/home/oakyildiz/rtabmap_ws/devel -DPCL_DIR=/opt/PCL1.7/share/pcl-1.7 -DVTK_DIR=/usr/local/lib/cmake/vtk-6.3 -DRTABMAP_QT_VERSION=5 ..

Best,

@matlabbe
Copy link
Member

matlabbe commented Apr 6, 2016

Did you try to clear the build directory of rtabmap before rebuilding it with Qt5? You can also make rtabmap with VERBOSE=TRUE:

$ cd rtabmap/build
$ make VERBOSE=TRUE

Then look for libraries linked by rtabmap_gui:

...
Linking CXX shared library ../../../bin/librtabmap_gui.so
cd /home/mathieu/workspace/rtabmap/build/guilib/src && /usr/bin/cmake -E cmake_link_script CMakeFiles/rtabmap_gui.dir/link.txt --verbose=TRUE
/usr/bin/c++  -fPIC  -fmessage-length=0  -Wno-deprecated -O3 -DNDEBUG    -shared -Wl,-soname,librtabmap_gui.so.0.10 -o ../../../bin/librtabmap_gui.so.0.10.10 CMakeFiles/rtabmap_gui.dir/MainWindow.cpp.o CMakeFiles/rtabmap_gui.dir/PreferencesDialog.cpp.o CMakeFiles/rtabmap_gui.dir/KeypointItem.cpp.o CMakeFiles/rtabmap_gui.dir/ImageView.cpp.o CMakeFiles/rtabmap_gui.dir/PdfPlot.cpp.o CMakeFiles/rtabmap_gui.dir/StatsToolBox.cpp.o CMakeFiles/rtabmap_gui.dir/ProgressDialog.cpp.o CMakeFiles/rtabmap_gui.dir/AboutDialog.cpp.o CMakeFiles/rtabmap_gui.dir/ConsoleWidget.cpp.o CMakeFiles/rtabmap_gui.dir/DatabaseViewer.cpp.o CMakeFiles/rtabmap_gui.dir/utilite/UPlot.cpp.o CMakeFiles/rtabmap_gui.dir/CloudViewer.cpp.o CMakeFiles/rtabmap_gui.dir/OdometryViewer.cpp.o CMakeFiles/rtabmap_gui.dir/LoopClosureViewer.cpp.o CMakeFiles/rtabmap_gui.dir/DataRecorder.cpp.o CMakeFiles/rtabmap_gui.dir/CameraViewer.cpp.o CMakeFiles/rtabmap_gui.dir/CalibrationDialog.cpp.o CMakeFiles/rtabmap_gui.dir/ExportDialog.cpp.o CMakeFiles/rtabmap_gui.dir/PostProcessingDialog.cpp.o CMakeFiles/rtabmap_gui.dir/ExportCloudsDialog.cpp.o CMakeFiles/rtabmap_gui.dir/MapVisibilityWidget.cpp.o CMakeFiles/rtabmap_gui.dir/GraphViewer.cpp.o CMakeFiles/rtabmap_gui.dir/CreateSimpleCalibrationDialog.cpp.o CMakeFiles/rtabmap_gui.dir/__/include/rtabmap/gui/moc_MainWindow.cxx.o CMakeFiles/rtabmap_gui.dir/__/include/rtabmap/gui/moc_PreferencesDialog.cxx.o CMakeFiles/rtabmap_gui.dir/__/include/rtabmap/gui/moc_DatabaseViewer.cxx.o CMakeFiles/rtabmap_gui.dir/moc_AboutDialog.cxx.o CMakeFiles/rtabmap_gui.dir/__/include/rtabmap/gui/moc_ConsoleWidget.cxx.o CMakeFiles/rtabmap_gui.dir/__/include/rtabmap/gui/moc_ImageView.cxx.o CMakeFiles/rtabmap_gui.dir/__/include/rtabmap/gui/moc_PdfPlot.cxx.o CMakeFiles/rtabmap_gui.dir/__/include/rtabmap/gui/moc_StatsToolBox.cxx.o CMakeFiles/rtabmap_gui.dir/__/include/rtabmap/gui/moc_ProgressDialog.cxx.o CMakeFiles/rtabmap_gui.dir/__/include/rtabmap/utilite/moc_UPlot.cxx.o CMakeFiles/rtabmap_gui.dir/__/include/rtabmap/utilite/moc_UImageView.cxx.o CMakeFiles/rtabmap_gui.dir/__/include/rtabmap/gui/moc_CloudViewer.cxx.o CMakeFiles/rtabmap_gui.dir/__/include/rtabmap/gui/moc_OdometryViewer.cxx.o CMakeFiles/rtabmap_gui.dir/__/include/rtabmap/gui/moc_LoopClosureViewer.cxx.o CMakeFiles/rtabmap_gui.dir/__/include/rtabmap/gui/moc_DataRecorder.cxx.o CMakeFiles/rtabmap_gui.dir/__/include/rtabmap/gui/moc_CameraViewer.cxx.o CMakeFiles/rtabmap_gui.dir/__/include/rtabmap/gui/moc_CalibrationDialog.cxx.o CMakeFiles/rtabmap_gui.dir/moc_ExportDialog.cxx.o CMakeFiles/rtabmap_gui.dir/moc_PostProcessingDialog.cxx.o CMakeFiles/rtabmap_gui.dir/moc_ExportCloudsDialog.cxx.o CMakeFiles/rtabmap_gui.dir/moc_MapVisibilityWidget.cxx.o CMakeFiles/rtabmap_gui.dir/__/include/rtabmap/gui/moc_GraphViewer.cxx.o CMakeFiles/rtabmap_gui.dir/moc_CreateSimpleCalibrationDialog.cxx.o CMakeFiles/rtabmap_gui.dir/qrc_GuiLib.cxx.o ../../../bin/librtabmap_core.so.0.10.10 ../../../bin/librtabmap_utilite.so.0.10.10 -lQtSvg -lQtGui -lQtXml -lQtCore /usr/lib/x86_64-linux-gnu/libopencv_videostab.so.2.4.8 /usr/lib/x86_64-linux-gnu/libopencv_video.so.2.4.8 /usr/lib/x86_64-linux-gnu/libopencv_ts.so.2.4.8 /usr/lib/x86_64-linux-gnu/libopencv_superres.so.2.4.8 /usr/lib/x86_64-linux-gnu/libopencv_stitching.so.2.4.8 /usr/lib/x86_64-linux-gnu/libopencv_photo.so.2.4.8 /usr/lib/x86_64-linux-gnu/libopencv_ocl.so.2.4.8 /usr/lib/x86_64-linux-gnu/libopencv_objdetect.so.2.4.8 /usr/lib/x86_64-linux-gnu/libopencv_ml.so.2.4.8 /usr/lib/x86_64-linux-gnu/libopencv_legacy.so.2.4.8 /usr/lib/x86_64-linux-gnu/libopencv_imgproc.so.2.4.8 /usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4.8 /usr/lib/x86_64-linux-gnu/libopencv_gpu.so.2.4.8 /usr/lib/x86_64-linux-gnu/libopencv_flann.so.2.4.8 /usr/lib/x86_64-linux-gnu/libopencv_features2d.so.2.4.8 /usr/lib/x86_64-linux-gnu/libopencv_core.so.2.4.8 /usr/lib/x86_64-linux-gnu/libopencv_contrib.so.2.4.8 /usr/lib/x86_64-linux-gnu/libopencv_calib3d.so.2.4.8 -lboost_system -lboost_filesystem -lboost_thread -lboost_date_time -lboost_iostreams -lboost_serialization -lpthread -lpcl_common -lpcl_octree -lOpenNI /usr/lib/libvtkCommon.so.5.8.0 /usr/lib/libvtkRendering.so.5.8.0 /usr/lib/libvtkHybrid.so.5.8.0 /usr/lib/libvtkCharts.so.5.8.0 -lpcl_io -Wl,-Bstatic -lflann_cpp_s -Wl,-Bdynamic -lpcl_kdtree -lpcl_search -lpcl_sample_consensus -lpcl_filters -lpcl_features -lpcl_keypoints -lpcl_segmentation -lpcl_visualization -lpcl_outofcore -lpcl_registration -lpcl_recognition -lqhull -lpcl_surface -lpcl_people -lpcl_tracking -lpcl_apps -lboost_system -lboost_filesystem -lboost_thread -lboost_date_time -lboost_iostreams -lboost_serialization -lpthread -lqhull -lOpenNI -Wl,-Bstatic -lflann_cpp_s -Wl,-Bdynamic /usr/lib/libvtkCommon.so.5.8.0 /usr/lib/libvtkRendering.so.5.8.0 /usr/lib/libvtkHybrid.so.5.8.0 /usr/lib/libvtkCharts.so.5.8.0 -lQVTK /usr/lib/x86_64-linux-gnu/libopencv_photo.so.2.4.8 /usr/lib/x86_64-linux-gnu/libopencv_legacy.so.2.4.8 /usr/lib/x86_64-linux-gnu/libopencv_video.so.2.4.8 /usr/lib/x86_64-linux-gnu/libopencv_objdetect.so.2.4.8 /usr/lib/x86_64-linux-gnu/libopencv_ml.so.2.4.8 /usr/lib/x86_64-linux-gnu/libopencv_calib3d.so.2.4.8 /usr/lib/x86_64-linux-gnu/libopencv_features2d.so.2.4.8 /usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4.8 /usr/lib/x86_64-linux-gnu/libopencv_imgproc.so.2.4.8 /usr/lib/x86_64-linux-gnu/libopencv_flann.so.2.4.8 /usr/lib/x86_64-linux-gnu/libopencv_core.so.2.4.8 /usr/lib/libvtkViews.so.5.8.0 /usr/lib/libvtkInfovis.so.5.8.0 /usr/lib/libvtkWidgets.so.5.8.0 /usr/lib/libvtkHybrid.so.5.8.0 /usr/lib/libvtkParallel.so.5.8.0 /usr/lib/libvtkVolumeRendering.so.5.8.0 /usr/lib/libvtkRendering.so.5.8.0 /usr/lib/libvtkGraphics.so.5.8.0 /usr/lib/libvtkImaging.so.5.8.0 /usr/lib/libvtkIO.so.5.8.0 /usr/lib/libvtkFiltering.so.5.8.0 /usr/lib/libvtkCommon.so.5.8.0 -lm /usr/lib/libvtksys.so.5.8.0 -ldl -lz /opt/ros/indigo/lib/libfreenect.so /opt/ros/indigo/lib/libfreenect_sync.so -lOpenNI2 -ldc1394 /opt/ros/indigo/lib/libg2o_stuff.so /opt/ros/indigo/lib/libg2o_core.so /opt/ros/indigo/lib/libg2o_solver_cholmod.so /opt/ros/indigo/lib/libg2o_solver_csparse.so /opt/ros/indigo/lib/libg2o_csparse_extension.so /opt/ros/indigo/lib/libg2o_types_slam2d.so /opt/ros/indigo/lib/libg2o_types_slam3d.so -lcxsparse -lcholmod -lpcl_common -lpcl_octree -lpcl_io -lpcl_kdtree -lpcl_search -lpcl_sample_consensus -lpcl_filters -lpcl_features -lpcl_keypoints -lpcl_segmentation -lpcl_visualization -lpcl_outofcore -lpcl_registration -lpcl_recognition -lpcl_surface -lpcl_people -lpcl_tracking -lpcl_apps -lpthread -Wl,-rpath,/home/mathieu/workspace/rtabmap/bin:/opt/ros/indigo/lib 
cd /home/mathieu/workspace/rtabmap/build/guilib/src && /usr/bin/cmake -E cmake_symlink_library ../../../bin/librtabmap_gui.so.0.10.10 ../../../bin/librtabmap_gui.so.0.10 ../../../bin/librtabmap_gui.so
make[2]: Leaving directory `/home/mathieu/workspace/rtabmap/build'
/usr/bin/cmake -E cmake_progress_report /home/mathieu/workspace/rtabmap/build/CMakeFiles  44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
[ 86%] Built target rtabmap_gui
...

Well above, rtabmap is linked to -lQtSvg -lQtGui -lQtXml -lQtCore as Qt 4 is used. You can also make sure that QVTK library (-lQVTK) is linked to right Qt too.

What I have with Qt4:

$ ldd catkin_ws/devel/bin/rtabmap | grep Q
    libQtGui.so.4 => /usr/lib/x86_64-linux-gnu/libQtGui.so.4 (0x00007f89ed00e000)
    libQtCore.so.4 => /usr/lib/x86_64-linux-gnu/libQtCore.so.4 (0x00007f89ecb29000)
    libQtSvg.so.4 => /usr/lib/x86_64-linux-gnu/libQtSvg.so.4 (0x00007f89e2ead000)
    libQVTK.so.5.8 => /usr/lib/libQVTK.so.5.8 (0x00007f89e1d07000)
    libQtSql.so.4 => /usr/lib/x86_64-linux-gnu/libQtSql.so.4 (0x00007f89d687b000)
    libvtkQtChart.so.5.8 => /usr/lib/libvtkQtChart.so.5.8 (0x00007f89d6308000)
$ ldd /usr/lib/libQVTK.so.5.8 | grep Qt
    libQtGui.so.4 => /usr/lib/x86_64-linux-gnu/libQtGui.so.4 (0x00007f9e21aed000)
    libQtSql.so.4 => /usr/lib/x86_64-linux-gnu/libQtSql.so.4 (0x00007f9e218ae000)
    libQtCore.so.4 => /usr/lib/x86_64-linux-gnu/libQtCore.so.4 (0x00007f9e213c9000)
    libvtkQtChart.so.5.8 => /usr/lib/libvtkQtChart.so.5.8 (0x00007f9e1f81e000)

@OAkyildiz
Copy link
Author

I cleaned the build directory and even tried with a fresh clone too, and when I called ldd for the .so's in the building directory, I saw they were linked against Qt5, it also run without segfault.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants