下载DCMTK源码:
源码下载链接:https://www.dcmtk.org/en/dcmtk/dcmtk-software-development/
我下载的是3.6.4版本,我当前最新是3.6.8
虚拟机安装cmake和cmake-gui工具
参考链接:https://blog.csdn.net/Toky_min/article/details/120041380
交叉编译DCMTK编译依赖的第三方库zlib等(这个好像不是依赖库)
参考源码dcmtk-3.6.4/ 路径下的INSTALL文档,需要的第三方库如下:
使用CMake-gui图形化工具生成Makefile文件
在终端输入cmake-gui打开 cmake-gui工具;
点击config,出现下面的界面:选Unix Makeflies和最后一个选项。
然后next跳转到编译器选择界面:
然后finish,自动构建并出现报错:
报错是因为cmake需要在目标主机上运行一个test程序,得出目标主机的基本算数类型,如float占几个字节等,
但是本地主机是X86的,没有目标主机arm的运行环境,无法得到目标主机的基本算数类型,INSTALL文档中说明如下:
解决方法:
还是参考源码dcmtk-3.6.4/ 路径下的INSTALL文档如下;
CROSS COMPILING WITH CMAKE 的最后面一段;
描述说必须要生成 “ arith.h ” 这个文件,并将它copy到build/(第一步中填写的生成makefile目录) config/include/dcmtk/config/arith.h 中。
“ arith.h ” 这个文件是通过编译 config/tests/arith.cc 生成一个ARM上的可执行文件XXX,最后将XXX文件copy到ARM主机上运行生成的。
所以我们需要在X86中通过交叉编译 config/tests/arith.cc 得到一个在PV300上的可执行文件XXX,然后将这XXX文件放到ARM主机PV300中运行,生成 “ arith.h ”,最后将它copy到 build/config/include/dcmtk/config/arith.h 中。
注意:交叉编译器要使用g++编译器:
编译没有意外的话又出现报错:
解决方法:
添加指定include路径
aarch64-linux-g++ config/tests/arith.cc -o arith -I ofstd/include/ -I config/dcmtk/config/include/
(指定的路径下面 需要有 dcmtk/config/ 这个头文件中写死的路径)
最后回到cmake-gui界面,点击configure按钮,构建输出“Generating done” 再点击 Generate ,Makefile即可生成在开始第一步填的路径下。
编译安装
终端中进入第一步填写Makefile存放路径下,执行make然后make install
关于make install的输出路径,可以在cmake-gui界面中指定,如下图所示:
将可执行文件放到ARM主机中运行
将交叉编译make install 指定生成目录下生成的bin目录和lib目录中的文件分别拷贝到ARM主机 /bin
和 /lib目录下。最后就可以在ARM板子上运行DCMTK库中的工具了。
QT中调用DCMTK库中的库问题
存在问题:
添加一个库后,发现编译出错
解决方法:
库之间存在依赖,将报错中找不到的库也添加进来即可。
注意:
1、关于拷贝: 目录下每个库都有软链接文件,而运行bin下链接的恰是lib中的软链接 ,所以在拷贝交叉编译生成的 lib目录下文件到主机时,要将软链接也拷贝过去。网上说拷贝软链接的方法是在 cp 命令中加参数 -d 。这在X86主机中拷贝没什么问题,但X86主机中拷贝到软链接到主机中挂载的U盘出现拷贝不了软链接问题。
解决办法:
直接在本地主机Windows中进行拷贝,通过网络文件映射将Ubuntu文件映射到Windows主机中。
2、在ARM主机运行DCMTK中工具时出现某些库找不到问题
解决办法:
在X86中使用find命令对库进行查找,将库拷贝到ARM的lib中即可。(缺少的库一般是DCMTK的第三方依赖库,因为前面我们交叉编译过了,所以在X86主机中都能找到)
注意:有些库是软链接或非ARM运行的库。需要使用file命令查看是不是ARM运行的库或软链接,找到真正的库。
报错中找不到gcc或g++库,拷贝交叉编译器中的过来即可。(板子原来的gcc和g++版本跟当前DCMTK的不一致导致)