2017-04-05 1 views
0

글쎄, 나는 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입니다. ../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) 

내 질문에서 ../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에서 haze_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에서

CMakeLists.txt 내가 기능을 디버깅 할 수있는 방법입니다 libtools에서.

+0

프로젝트 소스가 보이지 않아 동적 라이브러리를로드하는 방법을 모르겠습니다. 제 추측으로는 dynlib의 심볼이로드되어 있지 않다는 것입니다. 어쩌면 gdb에 그렇게 할 수 있습니다. –

+0

죄송합니다.'libtools.so'입니다. 건너 뛸 수 없습니다. 이전 질문에서 실수를 저질렀습니다. 문제를 해결했습니다. –

답변

0

글쎄, 내가 왜 CMAKE_BUILD_TYPE=Debug으로 설정하더라도 동적 라이브러리를 사용할 수 없다는 것을 알게되었습니다. Debug 모델을 설정하기 전에는 CMAKE_BUILD_TYPE=Release을 사용 했었습니다. 빌드 모델을 변경 한 후에 build 디렉토리의 파일을 삭제하지 않았습니다.

위의 설명이 옳은지 아닌지는 잘 모르겠지만 문제는 해결됩니다.

Thx!

관련 문제