说一下我们的项目是Java的dicom影像,但是有些医院的胶片打印机用的国产化的,dcm4che的通信模块不能使用,需要用 dcmtk的
dcmpsprt.exe 和 dcmprscu.exe的命令行服务
下面跟着我一起开始编译
1.dcmtk源码来源--windows编译
windows编译不是很难,大家照着这个编就可以了
看看这篇链接: DCMTK编译过程详解_灵客风的博客-CSDN博客
2.dcmtk源码 ----linux编译
(1)先上传zip文件 (手动上传)
(2) 进入目录
cd(当前目录) 比如 cd /usr/local/code/ 进入了code文件夹下了
(3) 解压zip文件
unzip dcmtk-DCMTK-3.6.5.zip
此时解压之后文件夹路径应该是 /usr/local/code/dcmtk-DCMTK-3.6.5
(4)进入dcmtk-DCMTK-3.6.5文件夹
cd dcmtk-DCMTK-3.6.5 (不确定当前层级的,可以用 ls 看看当前路径下的文件)
(5)先创建自己bulid文件夹,放后面生成的cmake 文件
mkdir build
(6)进入bulid
cd bulid
(7)先创建cmake的文件 (我这边先创建了,然后再改具体的配置的)
cmake -DCMKE_BUILD_TYPE=Debug -DBUILD_SHARED_LIBS=true ../
参数说明:
(a)-DCMKE_BUILD_TYPE:编译方式,不填默认为Release方式
以Debug方式编译 : -DCMKE_BUILD_TYPE=Debug
以Release方式编译 :-DCMKE_BUILD_TYPE=Release
(b)-DBUILD_SHARED_LIBS:是否生成动态库文件(.so文件),不填默认为false(不生成动态库文件,但会生成静态库.a文件)
生成动态库文件:-DBUILD_SHARED_LIBS=true
不生成动态库文件:-DBUILD_SHARED_LIBS=false
(8)工程构建完成后,开始编译工程
make -j8
这个是开8个并行线程的意思
(9) ccmake配置
ccmake .. (输入这个命令行,会弹出查cmake的界面)
然后一行一行修改,注意输入[t]之后选项就更多一些,也是说的高级模式
(10)cmake配置好之后,记得configure 和generating一下
(11)生成 (最关键的一步了)
make DESTDIR=../install-dcmtk install (我这里指定了把生成的东西放到 install-dcmtk文件夹里面)
(12)生成好之后,../install-dcmtk 文件夹下面
/install-dcmtk/usr/local/ 下面是生成的东西
其中 bin下面的内容 是对应window下面的exe,因为linux的万物皆文件,所以不带后缀.exe
lib64 下面的内容 是对应windows下面的 dll,注意一下里面有软链接和动态链接
要复制那个.so.15.3.6.5的文件,不过记得下载到本地的时候,重命名.so.15 就行了.
(12)编完了之后,我要用 dcmprscu试一试
可以进入文件夹路径下,然后输入
dcmprscu -v -c dcmpstat.cfg --spool 命令
如果没有说指令sool不完整,那就成功了
dcmprscu: error while loading shared libraries: libjpeg.so.9: cannot open shared object file: No such file or directory ---报这个错,是缺依赖
(13)下载libjpeg的源码, 自己去找这个源码,可以直接到我路径下找下载好的
(14) 上面那些步骤再来一遍
(15)编译成功之后,会在路径 /usr/local/lib下面出现这些.so
(16)一样的,把名字libjpeg.so.9.5.0重命名 libjpeg.so.9
(17)再执行命名dcmprscu -v -c dcmpstat.cfg --spool
dcmprscu: error while loading shared libraries: libjpeg.so.9: wrong ELF class: ELFCLASS32 -----多半是编译的版本不对,用指令 ldd libjpeg.so.9 看看,如果编译的不对,系统不对的情况,会出现"不是动态可执行文件"
如果没有说指令sool不完整,那就成功了.
(18)如果权限不够,可以给文件夹设置一下权限
chmod 777 -R DCMTK_Print/
编译的linux 64位的dcmtk和 libjepg,放到我的共享资源里面了,有需要的可以试一试