Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何修复:对符号的未定义引用';dlclose@@GLIBC_2.2.5-libdl.so从CL中丢失_C++_Linux_Cmake_Libdl - Fatal编程技术网

C++ 如何修复:对符号的未定义引用';dlclose@@GLIBC_2.2.5-libdl.so从CL中丢失

C++ 如何修复:对符号的未定义引用';dlclose@@GLIBC_2.2.5-libdl.so从CL中丢失,c++,linux,cmake,libdl,C++,Linux,Cmake,Libdl,我一直在移植这段代码来使用opencv3。 到目前为止,我已经完成了大部分的编译,但当它几乎完成时,我不断地得到这个错误。我已经研究了这个问题的一些情况,但没有一个解决方案对我有效。任何帮助都将不胜感激 到目前为止,我已经尝试: 手动创建libdl.so的符号链接(因为这解决了我之前在compliation中遇到的一些类似错误) 添加-ldl作为标志,并在CmakeList中 重新排列包含的库的顺序,这已经知道会产生影响 结果: [ 92%] Linking CXX executable

我一直在移植这段代码来使用opencv3。

到目前为止,我已经完成了大部分的编译,但当它几乎完成时,我不断地得到这个错误。我已经研究了这个问题的一些情况,但没有一个解决方案对我有效。任何帮助都将不胜感激

到目前为止,我已经尝试:

  • 手动创建libdl.so的符号链接(因为这解决了我之前在compliation中遇到的一些类似错误)
  • 添加-ldl作为标志,并在CmakeList中
  • 重新排列包含的库的顺序,这已经知道会产生影响
结果:

[ 92%] Linking CXX executable ../bin/TestBump /usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib/libhdf5.a(H5PL.o): undefined reference to symbol 'dlclose@@GLIBC_2.2.5'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libdl.so: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status config/CMakeFiles/TestBump.dir/build.make:149: recipe for target 'bin/TestBump'
failed make[2]: *** [bin/TestBump] Error 1 CMakeFiles/Makefile2:196: recipe for target 'config/CMakeFiles/TestBump.dir/all'
failed make[1]: *** [config/CMakeFiles/TestBump.dir/all] Error 2 
Makefile:129: recipe for target 'all' failed make: *** [all] Error 2
到目前为止,一切都不起作用。 有什么建议吗

我的cmakelists文件中的代码如下所示

# Local libraries
include_directories(../modules/CvGl)
include_directories(../modules/PoseExpr/include)
include_directories(${DLIB_INCLUDE_DIR})
include_directories(${HDF5_INCLUDE_DIR})
add_definitions(-std=c++11)
add_definitions(-DDLIB_JPEG_SUPPORT)
add_definitions(-DDLIB_PNG_SUPPORT)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} 
"${CMAKE_SOURCE_DIR}/cmake/")
set(CMAKE_BUILD_TYPE Release)
SET(SOURCE
    ../main.cpp
)

SET(CMAKE_CXX_FLAGS "-w -fopenmp")
add_executable(TestBump ${SOURCE})

if(WIN32)
    target_link_libraries(TestBump ${OpenCVLibraries})
endif(WIN32)
if(UNIX)
    target_link_libraries(TestBump -ldl ${OpenCV_LIBS} 
${Boost_LIBRARIES} ${CMAKE_DL_LIBS})
endif(UNIX)
target_link_libraries(TestBump PoseExprLib 
${DLIB_LIB_DIR}/libdlib.so  ${CMAKE_DL_LIBS} -lGLU -lOSMesa -lm)
install (TARGETS TestBump DESTINATION .)

您是否安装了正确版本的libdl?未解析的符号中有一个版本名。由于您将
libhdf5
作为静态库,因此无论何时使用此库,都需要手动链接到
dl
。在CMake中,使用
target\u link\u库
调用执行链接,您的任何尝试都没有注意到这一点。重复的问题(及其答案)描述了如何在CMake中链接到
dl
库。@Mansoor:命令行中的错误消息
DSO缺少到库的确切路径始终意味着给定库没有链接。此错误与库不兼容没有任何共同之处。您好,libdl是作为libboost all/libc6 dev的一部分安装的,它以前在代码的docker实现中工作过,当使用opencv2 libs编译时——不幸的是,它不支持我的GPU,尽管我使用opencv3编译——我在其他cmake操作中没有遇到过这个错误。我已尝试在正确的CMake列表文件(添加到orig post)中设置目标库,但仍然收到相同的错误-我已经尝试了该答案中建议的解决方案。是否安装了正确版本的libdl?未解析的符号中有一个版本名。由于您将
libhdf5
作为静态库,因此无论何时使用此库,都需要手动链接到
dl
。在CMake中,使用
target\u link\u库
调用执行链接,您的任何尝试都没有注意到这一点。重复的问题(及其答案)描述了如何在CMake中链接到
dl
库。@Mansoor:命令行中的错误消息
DSO缺少到库的确切路径始终意味着给定库没有链接。此错误与库不兼容没有任何共同之处。您好,libdl是作为libboost all/libc6 dev的一部分安装的,它以前在代码的docker实现中工作过,当使用opencv2 libs编译时——不幸的是,它不支持我的GPU,尽管我使用opencv3编译——我在其他cmake操作中没有遇到过这个错误。我曾尝试在正确的CMake列表文件(添加到orig post)中设置目标库,但仍然收到相同的错误-我已经尝试了该答案中建议的解决方案。