静态链接 DCMTK 库
Static linking DCMTK library
我在我的应用程序中使用 DCMTK 并使用 cmake 文件进行编译。 cmake 找到所有库(至少 headers,因为在将源文件编译为 .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 并不总是正常工作。
如果您无法使用 CMake 提供的脚本找到 DCMTK
(例如,${DCMTK_LIBRARIES}
不满足您静态 DCMTK 库的路径)您可以尝试使用此 alternative script
我在我的应用程序中使用 DCMTK 并使用 cmake 文件进行编译。 cmake 找到所有库(至少 headers,因为在将源文件编译为 .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 并不总是正常工作。
如果您无法使用 CMake 提供的脚本找到 DCMTK
(例如,${DCMTK_LIBRARIES}
不满足您静态 DCMTK 库的路径)您可以尝试使用此 alternative script