与 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 to
OPENSSL_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 to
SSL_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 to
TIFFGetField@LIBTIFF_4.0'
usr/lib/libvtkIO.so.5.8.0: undefined reference to
TIFFScanlineSize@LIBTIFF_4.0' usr/lib/libpq.so.5: undefined reference
to
X509_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 to
ENGINE_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 to
CRYPTO_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
to
TIFFClientOpen@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 to
SSL_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 to
TIFFGetFieldDefaulted@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 to
TIFFNumberOfDirectories@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 to
SSL_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 to
TIFFOpen@LIBTIFF_4.0' usr/lib/libpq.so.5:
undefined reference to SSL_write@OPENSSL_1.0.0' usr/lib/libpq.so.5:
undefined reference to
X509_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 to
SSL_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 to
SSL_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 to
SSL_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 to
SSL_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 to
TIFFSetErrorHandler@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 to
TIFFReadScanline@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 to
TIFFNumberOfTiles@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 文件中删除。一切正常。
我正在尝试编译 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 toCRYPTO_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 toTIFFIsTiled@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 toENGINE_free@OPENSSL_1.0.0' usr/lib/libpq.so.5: undefined reference to
OPENSSL_config@OPENSSL_1.0.0' usr/lib/libpq.so.5: undefined reference toSSL_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 toX509_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 toTIFFReadTile@LIBTIFF_4.0' usr/lib/libpq.so.5: undefined reference to
SSL_set_ex_data@OPENSSL_1.0.0' usr/lib/libvtkIO.so.5.8.0: undefined reference toTIFFWriteScanline@LIBTIFF_4.0' usr/lib/libvtkIO.so.5.8.0: undefined reference to
_TIFFfree@LIBTIFF_4.0' usr/lib/libpq.so.5: undefined reference toSSL_read@OPENSSL_1.0.0' usr/lib/libvtkIO.so.5.8.0: undefined reference to
TIFFGetField@LIBTIFF_4.0' usr/lib/libvtkIO.so.5.8.0: undefined reference toTIFFScanlineSize@LIBTIFF_4.0' usr/lib/libpq.so.5: undefined reference to
X509_STORE_set_flags@OPENSSL_1.0.0' usr/lib/libpq.so.5: undefined reference toSSLv23_method@OPENSSL_1.0.0' usr/lib/libpq.so.5: undefined reference to
ENGINE_load_private_key@OPENSSL_1.0.0' usr/lib/libpq.so.5: undefined reference toX509_get_subject_name@OPENSSL_1.0.0' usr/lib/libpq.so.5: undefined reference to
CRYPTO_set_id_callback@OPENSSL_1.0.0' usr/lib/libvtkIO.so.5.8.0: undefined reference toTIFFClose@LIBTIFF_4.0' usr/lib/libvtkIO.so.5.8.0: undefined reference to
TIFFClientOpen@LIBTIFF_4.0' usr/lib/libpq.so.5: undefined reference toSSL_CTX_new@OPENSSL_1.0.0' usr/lib/libpq.so.5: undefined reference to
SSL_CTX_get_cert_store@OPENSSL_1.0.0' usr/lib/libpq.so.5: undefined reference toSSL_check_private_key@OPENSSL_1.0.0' usr/lib/libvtkIO.so.5.8.0: undefined reference to
TIFFGetFieldDefaulted@LIBTIFF_4.0' usr/lib/libpq.so.5: undefined reference toENGINE_by_id@OPENSSL_1.0.0' usr/lib/libvtkIO.so.5.8.0: undefined reference to
TIFFNumberOfDirectories@LIBTIFF_4.0' usr/lib/libpq.so.5: undefined reference toERR_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 toSSL_load_error_strings@OPENSSL_1.0.0' usr/lib/libpq.so.5: undefined reference to
SSL_new@OPENSSL_1.0.0' usr/lib/libpq.so.5: undefined reference toX509_NAME_get_text_by_NID@OPENSSL_1.0.0' usr/lib/libvtkIO.so.5.8.0: undefined reference to
TIFFOpen@LIBTIFF_4.0' usr/lib/libpq.so.5: undefined reference toSSL_write@OPENSSL_1.0.0' usr/lib/libpq.so.5: undefined reference to
X509_free@OPENSSL_1.0.0' usr/lib/libpq.so.5: undefined reference toSSL_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 toSSL_free@OPENSSL_1.0.0' usr/lib/libpq.so.5: undefined reference to
SSL_ctrl@OPENSSL_1.0.0' usr/lib/libvtkIO.so.5.8.0: undefined reference toTIFFSetField@LIBTIFF_4.0' usr/lib/libpq.so.5: undefined reference to
SSL_set_verify@OPENSSL_1.0.0' usr/lib/libpq.so.5: undefined reference toENGINE_init@OPENSSL_1.0.0' usr/lib/libpq.so.5: undefined reference to
SSL_set_fd@OPENSSL_1.0.0' usr/lib/libpq.so.5: undefined reference toSSL_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 toSSL_CTX_ctrl@OPENSSL_1.0.0' usr/lib/libpq.so.5: undefined reference to
SSL_pending@OPENSSL_1.0.0' usr/lib/libpq.so.5: undefined reference toSSL_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 toENGINE_finish@OPENSSL_1.0.0' usr/lib/libvtkIO.so.5.8.0: undefined reference to
TIFFSetErrorHandler@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 toTIFFSetDirectory@LIBTIFF_4.0' usr/lib/libvtkIO.so.5.8.0: undefined reference to
TIFFReadScanline@LIBTIFF_4.0' usr/lib/libpq.so.5: undefined reference toSSL_shutdown@OPENSSL_1.0.0' usr/lib/libvtkIO.so.5.8.0: undefined reference to
TIFFNumberOfTiles@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 文件中删除。一切正常。