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

时间:2017-04-05 05:18:18

标签: c++ debugging cmake

好吧,我是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调试Test时,我无法跳过libtools.so的函数。 这些是来自不同目录的CMakeLists.txt

haze_removal/

下的CMakeLists.txt
    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)

../src/

下的CMakeLists.txt
    # 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})

../test/

下的CMakeLists.txt
    # 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中的函数。

1 个答案:

答案 0 :(得分:0)

好吧,即使我设置$(function() { $("form").on("submit",function(e) { var val = $("[name='not_robot'"].val(); if (isNaN(val) || !parseInt(Number(val)) == val || isNaN(parseInt(val, 10)) e.preventDefault(); } } ,我发现为什么我无法进入动态库。因为在我将构建模型设置为Debug之前,我曾经设置CMAKE_BUILD_TYPE=Debug。更改构建模型后,我没有删除CMAKE_BUILD_TYPE=Release目录中的文件。

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

THX!