与 qt pcl 和 vtk 的链接错误

Linking errors with qt pcl and vtk

我正在尝试编译 here 中描述的 PCL 教程,但我遇到了这些链接错误。

Linking CXX executable pcl_visualizer usr/lib/libpq.so.5: undefined reference to SSL_get_peer_certificate@OPENSSL_1.0.0' usr/lib/libvtkIO.so.5.8.0: undefined reference to TIFFReadDirectory@LIBTIFF_4.0' usr/lib/libpq.so.5: undefined reference to CRYPTO_num_locks@OPENSSL_1.0.0' usr/lib/libpq.so.5: undefined reference to SSL_CTX_use_certificate_chain_file@OPENSSL_1.0.0' usr/lib/libvtkIO.so.5.8.0: undefined reference to TIFFIsTiled@LIBTIFF_4.0' usr/lib/libpq.so.5: undefined reference to SSL_use_certificate_file@OPENSSL_1.0.0' usr/lib/libpq.so.5: undefined reference to ENGINE_free@OPENSSL_1.0.0' usr/lib/libpq.so.5: undefined reference toOPENSSL_config@OPENSSL_1.0.0' usr/lib/libpq.so.5: undefined reference to SSL_get_error@OPENSSL_1.0.0' usr/lib/libpq.so.5: undefined reference to SSL_use_PrivateKey_file@OPENSSL_1.0.0' usr/lib/libpq.so.5: undefined reference to X509_STORE_load_locations@OPENSSL_1.0.0' usr/lib/libvtkIO.so.5.8.0: undefined reference to TIFFDefaultStripSize@LIBTIFF_4.0' usr/lib/libvtkIO.so.5.8.0: undefined reference to TIFFReadTile@LIBTIFF_4.0' usr/lib/libpq.so.5: undefined reference toSSL_set_ex_data@OPENSSL_1.0.0' usr/lib/libvtkIO.so.5.8.0: undefined reference to TIFFWriteScanline@LIBTIFF_4.0' usr/lib/libvtkIO.so.5.8.0: undefined reference to_TIFFfree@LIBTIFF_4.0' usr/lib/libpq.so.5: undefined reference to SSL_read@OPENSSL_1.0.0' usr/lib/libvtkIO.so.5.8.0: undefined reference toTIFFGetField@LIBTIFF_4.0' usr/lib/libvtkIO.so.5.8.0: undefined reference to TIFFScanlineSize@LIBTIFF_4.0' usr/lib/libpq.so.5: undefined reference toX509_STORE_set_flags@OPENSSL_1.0.0' usr/lib/libpq.so.5: undefined reference to SSLv23_method@OPENSSL_1.0.0' usr/lib/libpq.so.5: undefined reference toENGINE_load_private_key@OPENSSL_1.0.0' usr/lib/libpq.so.5: undefined reference to X509_get_subject_name@OPENSSL_1.0.0' usr/lib/libpq.so.5: undefined reference toCRYPTO_set_id_callback@OPENSSL_1.0.0' usr/lib/libvtkIO.so.5.8.0: undefined reference to TIFFClose@LIBTIFF_4.0' usr/lib/libvtkIO.so.5.8.0: undefined reference toTIFFClientOpen@LIBTIFF_4.0' usr/lib/libpq.so.5: undefined reference to SSL_CTX_new@OPENSSL_1.0.0' usr/lib/libpq.so.5: undefined reference toSSL_CTX_get_cert_store@OPENSSL_1.0.0' usr/lib/libpq.so.5: undefined reference to SSL_check_private_key@OPENSSL_1.0.0' usr/lib/libvtkIO.so.5.8.0: undefined reference toTIFFGetFieldDefaulted@LIBTIFF_4.0' usr/lib/libpq.so.5: undefined reference to ENGINE_by_id@OPENSSL_1.0.0' usr/lib/libvtkIO.so.5.8.0: undefined reference toTIFFNumberOfDirectories@LIBTIFF_4.0' usr/lib/libpq.so.5: undefined reference to ERR_get_error@OPENSSL_1.0.0' usr/lib/libpq.so.5: undefined reference to CRYPTO_set_locking_callback@OPENSSL_1.0.0' usr/lib/libpq.so.5: undefined reference to SSL_load_error_strings@OPENSSL_1.0.0' usr/lib/libpq.so.5: undefined reference toSSL_new@OPENSSL_1.0.0' usr/lib/libpq.so.5: undefined reference to X509_NAME_get_text_by_NID@OPENSSL_1.0.0' usr/lib/libvtkIO.so.5.8.0: undefined reference toTIFFOpen@LIBTIFF_4.0' usr/lib/libpq.so.5: undefined reference to SSL_write@OPENSSL_1.0.0' usr/lib/libpq.so.5: undefined reference toX509_free@OPENSSL_1.0.0' usr/lib/libpq.so.5: undefined reference to SSL_CTX_load_verify_locations@OPENSSL_1.0.0' usr/lib/libvtkIO.so.5.8.0: undefined reference to TIFFReadRGBAImage@LIBTIFF_4.0' usr/lib/libpq.so.5: undefined reference to SSL_free@OPENSSL_1.0.0' usr/lib/libpq.so.5: undefined reference toSSL_ctrl@OPENSSL_1.0.0' usr/lib/libvtkIO.so.5.8.0: undefined reference to TIFFSetField@LIBTIFF_4.0' usr/lib/libpq.so.5: undefined reference toSSL_set_verify@OPENSSL_1.0.0' usr/lib/libpq.so.5: undefined reference to ENGINE_init@OPENSSL_1.0.0' usr/lib/libpq.so.5: undefined reference toSSL_set_fd@OPENSSL_1.0.0' usr/lib/libpq.so.5: undefined reference to SSL_connect@OPENSSL_1.0.0' usr/lib/libpq.so.5: undefined reference to ERR_reason_error_string@OPENSSL_1.0.0' usr/lib/libpq.so.5: undefined reference to SSL_CTX_ctrl@OPENSSL_1.0.0' usr/lib/libpq.so.5: undefined reference toSSL_pending@OPENSSL_1.0.0' usr/lib/libpq.so.5: undefined reference to SSL_use_PrivateKey@OPENSSL_1.0.0' usr/lib/libvtkIO.so.5.8.0: undefined reference to TIFFSetWarningHandler@LIBTIFF_4.0' usr/lib/libpq.so.5: undefined reference to ENGINE_finish@OPENSSL_1.0.0' usr/lib/libvtkIO.so.5.8.0: undefined reference toTIFFSetErrorHandler@LIBTIFF_4.0' usr/lib/libvtkIO.so.5.8.0: undefined reference to _TIFFmalloc@LIBTIFF_4.0' usr/lib/libpq.so.5: undefined reference to SSL_library_init@OPENSSL_1.0.0' usr/lib/libvtkIO.so.5.8.0: undefined reference to TIFFSetDirectory@LIBTIFF_4.0' usr/lib/libvtkIO.so.5.8.0: undefined reference toTIFFReadScanline@LIBTIFF_4.0' usr/lib/libpq.so.5: undefined reference to SSL_shutdown@OPENSSL_1.0.0' usr/lib/libvtkIO.so.5.8.0: undefined reference toTIFFNumberOfTiles@LIBTIFF_4.0' collect2: error: ld returned 1 exit status make[2]: * [pcl_visualizer] Error 1 make1: * [CMakeFiles/pcl_visualizer.dir/all] Error 2 make: *** [all] Error 2

CmakeList文件定义如下:

cmake_minimum_required (VERSION 2.6 FATAL_ERROR)

project      (pcl-visualizer)
find_package (Qt4 REQUIRED)
find_package (VTK REQUIRED)
find_package (PCL 1.7.1 REQUIRED)

include_directories (${PCL_INCLUDE_DIRS})
link_directories    (${PCL_LIBRARY_DIRS})
add_definitions     (${PCL_DEFINITIONS})

set  (project_SOURCES main.cpp pclviewer.cpp)
set  (project_HEADERS pclviewer.h)
set  (project_FORMS   pclviewer.ui)
set  (VTK_LIBRARIES   vtkRendering vtkGraphics vtkHybrid QVTK)

QT4_WRAP_CPP (project_HEADERS_MOC   ${project_HEADERS})
QT4_WRAP_UI  (project_FORMS_HEADERS ${project_FORMS})

INCLUDE         (${QT_USE_FILE})
ADD_DEFINITIONS (${QT_DEFINITIONS})

ADD_EXECUTABLE  (pcl_visualizer ${project_SOURCES}
                                ${project_FORMS_HEADERS}
                                ${project_HEADERS_MOC})

TARGET_LINK_LIBRARIES (pcl_visualizer ${QT_LIBRARIES} ${PCL_LIBRARIES} ${VTK_LIBRARIES})

CMakeList 文件中是否缺少任何内容?

您正在链接的 PostgreSQL 库缺少 openssl,您可以使用

进行检查
ldd /usr/lib/libpq.so.5

它应该报告类似

的内容
libssl.so.1.0.0 => not found

与 vtk 相同,但未找到有效的 TIFF 库。

首先,检查是否同时安装了openssl和tiff库,如果仍然链接失败,请检查版本是否正确。

其次,如果安装了所有库,请检查是否来自正确的体系结构(全部 32 位或全部 64 位)。

第三,手动强制您的项目加载库标志(从命令行 CMAKE_MODULE_LINKER_FLAGS / CMAKE_SHARED_LINKER_FLAGS 或在 target_link_libraries 指令中)。

如评论中所述,anaconda 是问题所在。

将您的 anaconda 文件夹重命名为 anaconda-temp,这样您的路径变量中的 link 在扫描期间对于 cmake 是不正确的。然后使用 sudo apt-get install qt5-default 安装 qt5-default 因为这解决了我的两个错误。然后 re运行 cmake 现在它应该在正确的位置检测到 qt5(即不在 anaconda 路径中)。

现在 运行 make 然后最后你可以将 anaconda-temp 重命名为 anaconda 以便它对应于你的路径和 bashrc 中的值并且一切照常。

要解决 TIFF 4.0 的问题,您可以尝试

cd $HOME/Downloads
wget http://old-releases.ubuntu.com/ubuntu/pool/universe/t/tiff3/libtiff4_3.9.7-2ubuntu1_amd64.deb
sudo dpkg -i libtiff4_3.9.7-2ubuntu1_amd64.deb 
sudo ldconfig

我认为你应该从你的系统路径中删除 ananconda3。对我来说,我只是将它从 ~/.bashrc 文件中删除。一切正常。