Я использую DCMTK в своем приложении, а для компиляции используйте файл cmake. cmake находит все библиотеки (по крайней мере, заголовки, потому что при компиляции исходных файлов в файлы .o) единственная проблема заключается в том, что при компоновке он пытается найти динамические библиотеки для DCMTK. Я собрал один как статический, поэтому у меня нет .so файлов. В результате это дает мне ошибку:No rule to make target /usr/lib/libdcmdata.so, needed by dcm_seg. Stop.
Я использую Ubuntu 14.04 x64.
Это меня сильно смущает. Итак, в чем проблемы?
cmake файл:
cmake_minimum_required(VERSION 2.6)
project(dcm_segm)
set(CMAKE_CXX_FLAGS "-std=c++0x ${CMAKE_CXX_FLAGS} -g -ftest-coverage -fprofile-arcs")
set(Boost_USE_STATIC_LIBS ON)
set(OpenCV_USE_STATIC_LIBS ON)
set(DCMTK_USE_STATIC_LIBS ON)
set(OpenCV_STATIC ON)
find_package( VTK REQUIRED )
find_package( OpenCV REQUIRED )
find_package( Boost COMPONENTS system filesystem REQUIRED )
find_package( DCMTK REQUIRED )
include(${VTK_USE_FILE} )
link_directories(${OpenCV_LIB_DIR})
add_executable(dcm_seg main.cpp DICOMin.cpp Ensemble.cpp Ensemble3dExtension.cpp point_3d.cpp RegionGrow.cpp)
target_link_libraries(dcm_seg ${VTK_LIBRARIES} ${OpenCV_LIBS} ${DCMTK_LIBRARIES} ${Boost_LIBRARIES})
Можете ли вы проверить содержимое $ {DCMTK_LIBRARIES} (это должен быть список путей к статическим библиотекам DCMTK)?
вы также можете проверить следующие записи CMake во время конфигурации CMake:
DCMTK_DIR /path/to/DCMTK/install
DCMTK_config_INCLUDE_DIR /path/to/DCMTK/install/include/dcmtk/config
DCMTK_dcmdata_INCLUDE_DIR /path/to/DCMTK/install/dcmdata/include/dcmtk/dcmdata
DCMTK_dcmdata_LIBRARY_DEBUG /path/to/DCMTK/install/dcmdata/libsrc/libdcmdata.a
DCMTK_dcmdata_LIBRARY_RELEASE /path/to/DCMTK/install/dcmdata/libsrc/libdcmdata.a
[...]
Еще один совет: в прошлом я отмечал, что DCMTK из сборки вместо установки не всегда работает должным образом.
Если у вас возникли проблемы с поиском DCMTK с помощью скрипта, поставляемого с CMake
(${DCMTK_LIBRARIES}
например, не содержит пути к статическим библиотекам DCMTK) вы можете попробовать использовать это альтернативный сценарий