Linux下编译DCMTK,ACE问题记录

  1. 下载
    进入dcmtk官网https://www.dcmtk.org/dcmtk.php.en,点击源码压缩包,发现无法下载,不知道是否是网络原因,但官方网页都可正常访问。于是到github上下载,一开始糊里糊涂下了个dcmtk_master,编译后使用发现不太稳定,各种报头文件内部变量无法识别的问题,最后下了个分支dcmtk3.6.4版本(https://github.com/DCMTK/dcmtk),测试正常(注意,github网页需要在fireFox浏览器上打开,才可以选择分支)
    下载方式:(1)windows下载,然后通过Filezilla拖到linux系统下
    (2)在linux下执行git https://github.com/DCMTK/dcmtk.git
    在这里插入图片描述
    在这里插入图片描述

  2. 安装cmake
    yum -y install cmake

  3. 编译DCMTK
    (1)cd dcmtk-DCMTK-3.6.4/ /进入dcmtk解压文件夹
    (2)mkdir build /新建build目录
    (3)cd build 进入build目录
    (4)ccmake … 执行ccmake … ,注意要加上上层目录路径
    (5)按c键进入修改配置,修改完成后再按一次c键,然后按g键保存退出
    BUILD_APPS OFF
    BUILD_SHARED_LIBS ON
    (6)make install 将编译生成的include和lib文件夹拷贝到/usr/local下

  4. 验证
    新建new.cpp文件:

#include "dcmtk/ofstd/ofstream.h"
#include "dcmtk/dcmpstat/dvpsdef.h"    /* for constants */
#include "dcmtk/dcmpstat/dviface.h"    /* for DVInterface */
#include "dcmtk/ofstd/ofstring.h"   /* for OFString */
#include "dcmtk/ofstd/ofbmanip.h"   /* for OFBitmanipTemplate */
#include "dcmtk/ofstd/ofdatime.h"   /* for OFDateTime */
#include "dcmtk/dcmdata/dcuid.h"      /* for dcmtk version name */
#include "dcmtk/dcmdata/cmdlnarg.h"   /* for prepareCmdLineArgs */
#include "dcmtk/ofstd/ofconapp.h"   /* for OFConsoleApplication */
#include "dcmtk/dcmimgle/dcmimage.h"
#include "dcmtk/dcmpstat/dvpspr.h"
#include "dcmtk/dcmpstat/dvpssp.h"
#include "dcmtk/dcmpstat/dvpshlp.h"     /* for class DVPSHelper */
#include "dcmtk/ofstd/ofstd.h"
#include "dcmtk/config/osconfig.h"
#include "dcmtk/dcmdata/dctk.h"
#include "dcmtk/dcmdata/dcistrmf.h"
#include "dcmtk/dcmdata/libi2d/i2dbmps.h"
#include "dcmtk/dcmdata/dcpxitem.h"
#include "dcmtk/dcmjpeg/djdecode.h"
#include "dcmtk/dcmdata/dcvrfd.h"
#include "dcmtk/dcmjpeg/djencode.h"
#include "dcmtk/dcmjpeg/djrplol.h"
#include <iostream>
#include <string>  
int main(int argc,char *argv[])
{
    if(argc!=3){
        std::cout << "illegal parameters" << std::endl;
            return -1;
    }
    char* dcmPath= argv[1];
    char* compressPath = argv[2];

    DJDecoderRegistration::registerCodecs(); // register JPEG codecs
    DcmFileFormat fileformat;
    if (fileformat.loadFile(dcmPath).good())
    {
      DcmDataset *dataset = fileformat.getDataset();
      // decompress data set if compressed
      dataset->chooseRepresentation(EXS_LittleEndianExplicit, NULL);
      // check if everything went well
      if (dataset->canWriteXfer(EXS_LittleEndianExplicit))
      {
        fileformat.saveFile(compressPath, EXS_LittleEndianExplicit);
      }
    }
    DJDecoderRegistration::cleanup();

    return 0 ;
}

编译
g++ new.cpp -DHAVE_CONFIG_H -I/usr/local/include -L/usr/local/lib/ -pthread -lcharls -lcmr -ldcmdata -ldcmdsig -ldcmfg -ldcmimage -ldcmimgle -ldcmiod -ldcmjpeg -ldcmjpls -ldcmnet -ldcmpmap -ldcmpstat -ldcmqrdb -ldcmrt -ldcmseg -ldcmsr -ldcmtls -ldcmtract -ldcmwlm -li2d -lijg12 -lijg16 -lijg8 -loflog -lofstd -o new


ACE编译过程

(1)ACE下载
http://download.dre.vanderbilt.edu/
注意,务必下载Full,不然没有GNUMakefile文件

(2)解压
tar xzvf ACE-6.5.6.tar.gz

(3)设置系统环境变量(CentOS7)
export ACE_ROOT=/root/makeProj/inatallpackage/ACE_wrappers
export LD_LIBRARY_PATH= A C E R O O T / l i b : ACE_ROOT/lib: ACEROOT/lib:LD_LIBRARY_PATH

(4)进入ACE解压目录下
cd ACE_wrappers/

(5)在ace目录下新建config.h文件,增加如下内容
#define ACE_HAS_EVENT_POLL
#define ACE_HAS_PTHREAD_SCHEDPARAM
#define ACE_HAS_PTHREADS_STD

#include “ace/config-linux.h”

(6)在 #ACE_ROOT/include/makeinclude/目录下创建:platform_macros.GNU,并在该文件中写入如下内容:
include $(ACE_ROOT)/include/makeinclude/platform_linux.GNU
INSTALL_PREFIX=/usr/local/ACE(可以把 lib, include, share, 和 bin 输出到 INSTALL_PREFIX 目录下)

(7)在/ACE_wrappers目录下执行make
make

(8)在/ACE_wrappers目录下执行make install;
make install
备注: 该操作是把 lib, include, share, 和 bin 输出到 INSTALL_PREFIX 目录下。

猜你喜欢

转载自blog.csdn.net/tianzhiyi1989sq/article/details/99690334