Статическое связывание библиотеки DCMTK

Я использую 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})

person Dmitry Cherezov    schedule 07.05.2015    source источник
comment
У вас есть libdcmdata.so в /usr/lib?   -  person Fredrick Gauss    schedule 07.05.2015


Ответы (1)


Можете ли вы проверить содержимое ${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), вы можете попробовать использовать этот альтернативный сценарий

person René paul Debroize    schedule 07.05.2015
comment
Да, это проблема. Первоначально содержание: /usr/lib/libdcmdata.so... Я думаю, что проблема в том, что сначала я установил DCMTK через synaptic, но там были только файлы .so, и я удалил и установил DCMTK из исходного кода с помощью CMake, и дело в том, что FindDCMTK.cmake устарел. В любом случае, если в моем cmakelists.txt я изменю переменную ${DCMTK_LIBRARIES} на /usr/lib/libdcmdata.a..., то при линковке у меня будет: ../lib/libdcmdata.a(dcelem.cc.o): In function DcmElement::writeXMLStartTag(..): dcelem.cc:(.text+0x7ef3): undefined reference to dcmtk::log4cplus::.. - person Dmitry Cherezov; 07.05.2015