【问题标题】:Static linking DCMTK library静态链接 DCMTK 库
【发布时间】:2015-05-07 05:22:51
【问题描述】:

我在我的应用程序中使用 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})

【问题讨论】:

  • /usr/lib 中有 libdcmdata.so 吗?

标签: c++ linux linker cmake dcmtk


【解决方案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 并不总是能正常工作。

如果您在使用 CMake 提供的脚本查找 DCMTK 时遇到问题 (例如,${DCMTK_LIBRARIES} 不满足静态 DCMTK 库的路径)您可以尝试使用此 alternative script

【讨论】:

  • 是的,这就是问题所在。最初,内容是:/usr/lib/libdcmdata.so... 我认为问题在于首先我通过突触安装了 DCMTK,但是那里只有 .so 文件,我使用 CMake 从源代码中删除并安装了 DCMTK,而我认为 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::..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-22
  • 1970-01-01
相关资源
最近更新 更多