在这种情况下如何调试动态库



嗯,我是CMake的新手。 我有以下文件结构

haze_removal
|---build
|---bin
|    |--Test
|    |--CMakeLists.txt
|---lib
|    |--libtools.so
|---include
|    |--tools.hpp
|---test
|    |--main.cpp
|    |--CMakeLists.txt
|---src
|    |--tools.cpp
|    |--CMakeLists.txt
|---CMakeLists.txt

libtools.so 是从../src/tools.cpp.我使用以下 cmake 命令在../build中构建整个项目: cmake -DCMAKE_BUILD_TYPE=Debug .. make 测试是从../test/main.cpp构建的 我成功地构建了这个项目。但是当我使用gdb ./Test调试测试时,我无法跳过 libtools.so 中的函数。 这些是我来自不同目录的CMakeLists.txt

CMakeLists.txt underhaze_removal/

cmake_minimum_required(VERSION 2.8)
project(haze_removal)
# find needed package
find_package(OpenCV REQUIRED)
# library directory
add_subdirectory(src)
# test
add_subdirectory(test)

CMakeLists.txt under../src/

# generate dynamic library
# add source file, include directories
aux_source_directory(. TOOLS_SRC)
include_directories(${PROJECT_SOURCE_DIR}/include)
# generate
add_library(tools SHARED ${TOOLS_SRC})
# set output directory and lib's name
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
set_target_properties(tools PROPERTIES OUTPUT_NAME "tools")
# link library
target_link_libraries(tools ${OpenCV_LIBS})

CMakeLists.txt under../test/

# add source file, include directories, link directories
aux_source_directory(. EXE_SRC)
include_directories(${PROJECT_SOURCE_DIR}/include)
link_directories(${PROJECT_SOURCE_DIR}/lib)
# generate
add_executable(Test ${EXE_SRC})
# set output directory
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
# link libraries
target_link_libraries(Test ${OpenCV_LIBS} libtools.so)

我的问题是如何调试来自libtools的函数。

好吧,我发现这就是为什么即使我设置了CMAKE_BUILD_TYPE=Debug也无法步入动态库。因为在我将构建模型设置为调试之前,我曾经设置CMAKE_BUILD_TYPE=Release.更改构建模型后,我没有删除build目录中的文件。

我不知道上面的解释是否正确,但我确实解决了我的问题。

感谢!

最新更新