静态链接DCMTK库

Static linking DCMTK library

本文关键字:DCMTK 链接 静态      更新时间:2023-10-16

我在应用程序中使用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时遇到了麻烦(例如,${DCMTK_LIBRARIES}不满意您的路径static dcmtk libs)您可以尝试使用此替代脚本