글쎄, 나는 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에서.
프로젝트 소스가 보이지 않아 동적 라이브러리를로드하는 방법을 모르겠습니다. 제 추측으로는 dynlib의 심볼이로드되어 있지 않다는 것입니다. 어쩌면 gdb에 그렇게 할 수 있습니다. –
죄송합니다.'libtools.so'입니다. 건너 뛸 수 없습니다. 이전 질문에서 실수를 저질렀습니다. 문제를 해결했습니다. –