Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 静态链接DCMTK库_C++_Linux_Linker_Cmake_Dcmtk - Fatal编程技术网

C++ 静态链接DCMTK库

C++ 静态链接DCMTK库,c++,linux,linker,cmake,dcmtk,C++,Linux,Linker,Cmake,Dcmtk,我在应用程序中使用DCMTK,在编译时使用cmake文件。cmake查找所有库(至少是头,因为在将源文件编译为.o文件时),唯一的问题是在链接过程中,它试图查找DCMTK的动态库。我将其中一个编译为静态,因此没有.so文件。结果,它给了我一个错误:没有使target/usr/lib/libdcmdata.so成为dcm_seg所需的规则。停止。 我使用Ubuntu 14.04 x64 这让我很困惑。那么,有什么问题 cmake文件: cmake_minimum_required(VERSION

我在应用程序中使用DCMTK,在编译时使用cmake文件。cmake查找所有库(至少是头,因为在将源文件编译为.o文件时),唯一的问题是在链接过程中,它试图查找DCMTK的动态库。我将其中一个编译为静态,因此没有.so文件。结果,它给了我一个错误:
没有使target/usr/lib/libdcmdata.so成为dcm_seg所需的规则。停止。

我使用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 libs的路径)您可以尝试使用此

是否有
libdcmdata。因此
/usr/lib
中的
是的,这就是问题所在。最初,内容是:
/usr/lib/libdcmdata。所以…
我认为问题是,首先我通过synaptic安装了DCMTK,但那里只有.so文件,我用CMake从源代码中删除并安装了DCMTK,我的问题是FindDCMTK.CMake很旧。无论如何,如果在我的cmakelists.txt中我将变量
${DCMTK_LIBRARIES}
更改为
/usr/lib/libdcmdata.a..
,那么在链接过程中,我有:
。/lib/libdcmdata.a(dcelem.cc.o):在函数DcmElement::writeXMLStartTag(..):dcelem.cc:(.text+0x7ef3):对DCMTK::4cplus的未定义的引用: