2017-04-05 14 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からビルドされています。私は../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から。

+0

私はあなたのプロジェクトのソースがないので、どのように動的ライブラリを読み込むのか分かりません。私の推測では、あなたのdynlibのシンボルが読み込まれていないということです。たぶんgdbにそうするよう指示することができます。 –

+0

申し訳ありませんが、 'libtools.so'です。前の質問で間違いを犯しました。私はそれを修正しました。 –

答えて

0

私はCMAKE_BUILD_TYPE=Debugに設定しても、なぜダイナミックライブラリに入ることができないのかを知ることができます。ビルドモデルをDebugに設定する前に、私はCMAKE_BUILD_TYPE=Releaseを設定していました。ビルドモデルを変更した後、私はbuildディレクトリのファイルを削除しませんでした。

上記の説明が正しいかどうかわかりませんが、私は自分の問題を解決します。

Thx!

関連する問題