【问题标题】:Linking errors with qt pcl and vtk使用 qt pcl 和 vtk 链接错误
【发布时间】:2016-02-14 15:02:58
【问题描述】:

我正在尝试编译here 描述的 PCL 教程,但我正面临这些链接错误。

链接 CXX 可执行文件 pcl_visualizer usr/lib/libpq.so.5: 未定义 参考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:未定义 参考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:未定义的引用 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:未定义 参考ENGINE_free@OPENSSL_1.0.0' usr/lib/libpq.so.5: undefined reference toOPENSSL_config@OPENSSL_1.0.0' usr/lib/libpq.so.5: 未定义对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 的引用:未定义 参考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: 对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:未定义的引用 TIFFWriteScanline@LIBTIFF_4.0' usr/lib/libvtkIO.so.5.8.0: undefined reference to_TIFFfree@LIBTIFF_4.0' usr/lib/libpq.so.5:未定义 参考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:未定义的引用 TIFFScanlineSize@LIBTIFF_4.0' usr/lib/libpq.so.5: undefined reference toX509_STORE_set_flags@OPENSSL_1.0.0' usr/lib/libpq.so.5:未定义 参考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:未定义的引用 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:未定义的引用 TIFFClose@LIBTIFF_4.0' usr/lib/libvtkIO.so.5.8.0: undefined reference toTIFFClientOpen@LIBTIFF_4.0' usr/lib/libpq.so.5:未定义 参考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:未定义的引用 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:未定义的引用 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: 对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 的未定义引用: 未定义对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:未定义的引用 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: 未定义对SSL_write@OPENSSL_1.0.0' usr/lib/libpq.so.5: undefined reference toX509_free@OPENSSL_1.0.0' usr/lib/libpq.so.5 的引用: 未定义对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 的引用:未定义 参考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: 未定义对TIFFSetField@LIBTIFF_4.0' usr/lib/libpq.so.5: undefined reference toSSL_set_verify@OPENSSL_1.0.0' 的引用 usr/lib/libpq.so.5:未定义对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:未定义引用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:未定义 参考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: 未定义对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 的引用:未定义 参考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:未定义的引用 _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:未定义 参考TIFFSetDirectory@LIBTIFF_4.0' usr/lib/libvtkIO.so.5.8.0: undefined reference toTIFFReadScanline@LIBTIFF_4.0' usr/lib/libpq.so.5:未定义的引用 SSL_shutdown@OPENSSL_1.0.0' usr/lib/libvtkIO.so.5.8.0: undefined reference toTIFFNumberOfTiles@LIBTIFF_4.0' collect2:错误:ld 返回 1 退出状态 make[2]: * [pcl_visualizer] 错误 1 ​​make1: * [CMakeFiles/pcl_visualizer.dir/all] 错误 2 make: *** [all] 错误 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 文件中是否缺少任何内容?

【问题讨论】:

    标签: qt linker cmake vtk printer-control-language


    【解决方案1】:

    你链接的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 指令中)。

    【讨论】:

    • 当我列出 libpq.so 的依赖项时,它会为 libssl libssl.so.1.0.0 => /lib/x86_64-linux-gnu/libssl.so.1.0.0 (0x00007f13c113a000) 提供这个。我去看看是不是版本问题。感谢您的帮助!
    • 问题是由 Anaconda 引起的。那是发现的第一个 Qt 版本,我怀疑我安装的 Anaconda 是 32 位,其余的是 64 位。
    • 这是我的第二个想法,当 32 和 64 库混合时可能会发生这种情况。
    • 嘿,我也有同样的问题:我发现我还有更多版本的 libssl。你是怎么解决的?
    【解决方案2】:

    正如 cmets 中提到的,anaconda 是问题所在。

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

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

    【讨论】:

      【解决方案3】:

      为了解决 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
      

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-12-17
          • 2022-06-14
          • 1970-01-01
          • 2020-08-31
          • 1970-01-01
          • 1970-01-01
          • 2012-06-27
          • 2022-06-15
          相关资源
          最近更新 更多