dcmtk vtk vtk-dicom(gdcm) 编译

36 阅读2分钟

前置

sudo apt install screen 

sudo apt install build-essential gcc-13 g++-13 cpp-13 gcc-13-plugin-dev   
sudo apt install g++-13-multilib

sudo apt install libssl-dev libpng-dev libtiff-dev  libwrap0-dev  zlib1g-dev  libxml2-dev

screen 使用(vtk编译太慢,挂后台慢慢编译)

//开启
scrren -S dcmtk
//后台运行 
ctrl+a
d
//查看列表
screen -ls
//恢复
screen -r dcmtk  

dcmtk编译

sudo apt remove libdcmtk-dev

git clone https://github.com/DCMTK/dcmtk.git  
cd dcmtk  
git checkout DCMTK-3.6.7

mkdir build && cd build

cmake .. \
-DCMAKE_INSTALL_PREFIX=/opt/dcmtk \
-DBUILD_SHARED_LIBS=ON \
-DCMAKE_BUILD_TYPE=Release

screen -S dcmtk  
make -j2 > ../make.log

ctrl +a +d

sudo make install  
sudo ldconfig

GDCM 编译

git clone https://github.com/malaterre/GDCM.git  
cd GDCM

git checkout v3.0.24

mkdir build && cd build

cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=ON \
-DGDCM_USE_VTK=OFF \
-DGDCM_BUILD_APPLICATIONS=ON \
-DCMAKE_INSTALL_PREFIX=/usr/local

screen -S gdcm  
make -j2 > ../make.log

ctrl +a +d

sudo make install  
sudo ldconfig  

vtk 编译

git clone https://gitlab.kitware.com/vtk/vtk.git  
cd vtk && git checkout v9.6.0

mkdir build && cd build

cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=ON \
-DVTK_GROUP_ENABLE_Qt=YES \
-DQt6_DIR=/usr/lib/x86_64-linux-gnu/cmake/Qt6 \
-DVTK_MODULE_ENABLE_VTK_GUISupportQtQuick=NO \
-DCMAKE_INSTALL_PREFIX=/usr/local

screen -S vtk  
make -j2 > ../make.log

ctrl +a +d

sudo make install  
sudo ldconfig  

vtk-dicom编译 使用gdcm解码

git clone https://github.com/dgobbi/vtk-dicom.git  
cd vtk-dicom

//下面的tag可以从vtk 源码 Remote/vtkDICOM.remote.cmake 里拿到  
git checkout d1e25090f354542d7bd85c08ee36d8dc22bbbcd8

mkdir build && cd build

//GDCM  
cmake .. \
-DVTK_DIR=/usr/local/lib/cmake/vtk-9.6 \
-DCMAKE_BUILD_TYPE=Release \
-DUSE_GDCM=ON \
-DCMAKE_INSTALL_PREFIX=/usr/local

screen -S vtk_dicom  
make -j2 > ../make.log

ctrl +a +d

sudo make install  
sudo ldconfig  

上面编译后的路径

/opt/dcmtk/include/dcmtk  
/usr/local/include/vtk-9.6  

CMakeList.txt里追加

下面项目名是DicomViewer 添加了qt6 dcmtk vtk依赖

(gdcm 是解码的,vtk-dicom里调用了,放到了vtk下)

find_package(Qt6 REQUIRED COMPONENTS Widgets)

set(DCMTK_DIR "/opt/dcmtk/lib/cmake/dcmtk")
set(VTK_DIR "/usr/local/lib/cmake/vtk-9.6")
find_package(DCMTK REQUIRED)
find_package(VTK REQUIRED COMPONENTS
  CommonCore
  CommonDataModel
  IOImage
  ImagingCore
  RenderingCore
  RenderingOpenGL2
  RenderingVolumeOpenGL2
  InteractionStyle
  RenderingQt
)

qt_standard_project_setup()

execute_process(COMMAND python gen_src.py)
include(source_list.cmake)

add_executable(DicomViewer_exe ${SRC})
add_executable(DicomViewer::exe ALIAS DicomViewer_exe)

set_property(TARGET DicomViewer_exe PROPERTY OUTPUT_NAME DicomViewer)

target_compile_features(DicomViewer_exe PRIVATE cxx_std_17)

target_link_libraries(DicomViewer_exe
   PRIVATE
     Qt6::Widgets
     DCMTK::DCMTK
     VTK::CommonCore
     VTK::CommonDataModel
     VTK::IOImage
     VTK::ImagingCore
     VTK::RenderingCore
     VTK::RenderingOpenGL2
     VTK::RenderingVolumeOpenGL2
     VTK::InteractionStyle
     VTK::RenderingQt
)
# ---- Install rules ----