まあ、私は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
からビルドされています。私は../build
で次のcmakeコマンドを使用してプロジェクト全体を構築します。 cmake -DCMAKE_BUILD_TYPE=Debug .. make
テストはビルドから../test/main.cpp
このプロジェクトを正常にビルドします。しかし、gdb ./Test
を使ってTestをデバッグすると、libtools.soの関数をスキップすることはできません。 これらは異なるディレクトリの私のCMakeLists.txt
です。
../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下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 ../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から。
私はあなたのプロジェクトのソースがないので、どのように動的ライブラリを読み込むのか分かりません。私の推測では、あなたのdynlibのシンボルが読み込まれていないということです。たぶんgdbにそうするよう指示することができます。 –
申し訳ありませんが、 'libtools.so'です。前の質問で間違いを犯しました。私はそれを修正しました。 –