用VS2017编译CxImage600的debug32和release32

前言

基本定义:CxImage类库是一个优秀的图像操作类库。它可以快捷地存取、显示、转换各种图像。

CxImage对比opencv性能如何?

下载

编译过程

1、版本转换,直接用VS2017打开 CxImgLib.dsw, 就可以转换为CxImgLib.sln

正常打开之后,有13个项目。逐个项目,查看属性。发现其字符集默认均为:多字节字符集或空着。将每个项目都修改为Unicode,或者不修改,都可以编译通过。这两种情况,我都尝试过了。所以读者可以根据需要进行设置。

2、编译顺序:jasper、jbig、jpeg、libdcr、mng、png、tiff、zlib 这8个库,然后编译cximage、CxImageCtrlDll,最后编译CxImageMfcDll,最最后面,处理demo,demoDll。

3、将每个项目:debug、32位、 设置好字符集Unicode、多线程调试(/MTd)【release版本,需设置为 MT】。 然后 直接编译,会报错,例如:编译 jasper, 生成出错:

1>cl : 命令行 warning D9035: “Gm”选项已否决,并将在将来的版本中移除
1>cl : 命令行 error D8016: “/ZI”和“/Gy-”命令行选项不兼容

所以先更改属性,从 否(/Gy-) 改为 是(/Gy)。 重新编译,通过。

jasper,需要将 否(/Gy-) 改为 是(/Gy); 编译通过。

jbig,需要将 否(/Gy-) 改为 是(/Gy); 编译通过。

jpeg,需要将 否(/Gy-) 改为 是(/Gy); 编译通过。

libdcr,需要将 否(/Gy-) 改为 是(/Gy); 编译通过。

mng,需要将 否(/Gy-) 改为 是(/Gy); 编译通过。

png,需要将 否(/Gy-) 改为 是(/Gy); 编译通过。

tiff,需要将 否(/Gy-) 改为 是(/Gy); 编译通过。

zlib,需要将 否(/Gy-) 改为 是(/Gy); 编译通过。

cximage,需要将 否(/Gy-) 改为 是(/Gy); 编译通过。

4、每一个项目中,都有一个debug文件,debug文件中,就有生成对应的 *.lib 文件。在raw/debug/ 文件中,编译生成了一个libdcr.lib 的文件,对应项目中,是libdcr项目。

 

cximage、jasper、jbig、jpeg、libdcr、mng、png、tiff、zlib这9个项目是生成静态库文件的,

对应的静态库文件分别是cximage.lib;jasper.lib;jbig.lib;jpeg.lib;libdcr.lib;mng.lib;png.lib;tiff.lib;zlib.lib;

5、先编译CxImageCtrlDll,后编译CxImageMfcDll。修改字符集,与上面保持一致。

CxImageCtrlDll,需要将 否(/Gy-) 改为 是(/Gy); 编译通过。

CxImageMfcDll,需要将 否(/Gy-) 改为 是(/Gy); 编译通过。

配置属性:(我将上面生成的9个lib文件,放到了一起,然后连接好路径,直接添加附加依赖项。)

    

CxImageCtrlDll 顺利通过,编译生成如下::========== 生成: 成功 1 个,失败 0 个,最新 8 个,跳过 0 个 ==========

CxImageMfcDll 编译报错:

报错一:

fatal error C1189: #error:  MFC does not support WINVER less than 0x0501.  Please change the definition of WINVER in your project properties or precompiled header.

解决方案:

// 此三行会产生为题,用下面两行代替。data:2021/5/19
//#ifndef WINVER 
//#define WINVER  0x0400
//#endif

#define WINVER 0x0602
#define _WIN32_WINNT 0x0602

重新生成,报错二:

9>mfcs140d.lib(dllmodul.obj) : error LNK2005: _DllMain@12 已经在 MSVCRTD.lib(dll_dllmain_stub.obj) 中定义
9>  正在创建库 .\Debug\cximaged.lib 和对象 .\Debug\cximaged.exp
9>../../bin/cximaged.dll : fatal error LNK1169: 找到一个或多个多重定义的符号
9>已完成生成项目“cximagemfcdll.vcxproj”的操作 - 失败。
========== 全部重新生成: 成功 8 个,失败 1 个,跳过 0 个 ==========

还未解决。。。

6、编译demo,demoDll

demo,需要将 否(/Gy-) 改为 是(/Gy); 编译通过。

demoDll,需要将 否(/Gy-) 改为 是(/Gy); 编译通过。

demo 报错:

fatal error C1189: #error:  MFC does not support WINVER less than 0x0501.  Please change the definition of WINVER in your project properties or precompiled header.

修改方法同上。

demo的最后结果如下:在debug下,确实生成了demo.lib文件。但是,因为缺少lib库,所以出现的问题。

10>  正在创建库 .\Debug\demo.lib 和对象 .\Debug\demo.exp
10>demoDoc.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall CxImage::CxImage(char const *,unsigned long)" (??0CxImage@@QAE@PBDK@Z),该符号在函数 "public: virtual int __thiscall CDemoDoc::OnOpenDocument(char const *)" (?OnOpenDocument@CDemoDoc@@UAEHPBD@Z) 中被引用
10>demoDoc.obj : error LNK2019: 无法解析的外部符号 "public: static unsigned long __cdecl CxImage::GetTypeIdFromName(char const *)" (?GetTypeIdFromName@CxImage@@SAKPBD@Z),该符号在函数 "public: int __thiscall CDemoDoc::FindType(class ATL::CStringT<char,class StrTraitMFC_DLL<char,class ATL::ChTraitsCRT<char> > > const &)" (?FindType@CDemoDoc@@QAEHABV?$CStringT@DV?$StrTraitMFC_DLL@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@@Z) 中被引用
10>demoDoc.obj : error LNK2019: 无法解析的外部符号 "public: bool __thiscall CxImage::Load(char const *,unsigned long)" (?Load@CxImage@@QAE_NPBDK@Z),该符号在函数 "public: virtual int __thiscall CDemoDoc::OnOpenDocument(char const *)" (?OnOpenDocument@CDemoDoc@@UAEHPBD@Z) 中被引用
10>demoDoc.obj : error LNK2019: 无法解析的外部符号 "public: bool __thiscall CxImage::Save(char const *,unsigned long)" (?Save@CxImage@@QAE_NPBDK@Z),该符号在函数 "public: virtual int __thiscall CDemoDoc::OnSaveDocument(char const *)" (?OnSaveDocument@CDemoDoc@@UAEHPBD@Z) 中被引用
10>../bin/demod.exe : fatal error LNK1120: 4 个无法解析的外部命令
10>已完成生成项目“demo.vcxproj”的操作 - 失败。
========== 全部重新生成: 成功 9 个,失败 1 个,跳过 0 个 ==========

demoDll 编译,直接通过。========== 全部重新生成: 成功 10 个,失败 0 个,跳过 0 个 ==========

demoDll.exe 直接运行结果:

 

Unicode版本编译问题:

1、CxImageMfcDll 改为Unicode,配置附加依赖项,生成,报错如下:

9>mfcs140ud.lib(dllmodul.obj) : error LNK2005: _DllMain@12 已经在 MSVCRTD.lib(dll_dllmain_stub.obj) 中定义
9>  正在创建库 .\Debug\cximaged.lib 和对象 .\Debug\cximaged.exp
9>../../bin/cximaged.dll : fatal error LNK1169: 找到一个或多个多重定义的符号
9>已完成生成项目“cximagemfcdll.vcxproj”的操作 - 失败。
========== 全部重新生成: 成功 8 个,失败 1 个,跳过 0 个 ==========

解决方案: 暂无。

编译release32位版本Unicode

每次都是CxImageMfcDll 出问题:

9>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.16.27023\atlmfc\include\afxcmn.inl(400): error C2065: “TVIF_STATEEX”: 未声明的标识符
9>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.16.27023\atlmfc\include\afxcmn.inl(402): error C2065: “TVIF_EXPANDEDIMAGE”: 未声明的标识符
9>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.16.27023\atlmfc\include\afxcmn2.inl(270): error C2065: “RB_SETEXTENDEDSTYLE”: 未声明的标识符
9>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.16.27023\atlmfc\include\afxcmn2.inl(272): error C2065: “RB_GETEXTENDEDSTYLE”: 未声明的标识符
9>已完成生成项目“cximagemfcdll.vcxproj”的操作 - 失败。
========== 全部重新生成: 成功 8 个,失败 1 个,跳过 0 个 ==========

demo 出现的问题:

10>------ 已启动全部重新生成: 项目: demo, 配置: Release Win32 ------
10>StdAfx.cpp
10>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.16.27023\atlmfc\include\afxcmn.inl(400): error C2065: “TVIF_STATEEX”: 未声明的标识符
10>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.16.27023\atlmfc\include\afxcmn.inl(402): error C2065: “TVIF_EXPANDEDIMAGE”: 未声明的标识符
10>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.16.27023\atlmfc\include\afxcmn2.inl(270): error C2065: “RB_SETEXTENDEDSTYLE”: 未声明的标识符
10>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.16.27023\atlmfc\include\afxcmn2.inl(272): error C2065: “RB_GETEXTENDEDSTYLE”: 未声明的标识符
10>已完成生成项目“demo.vcxproj”的操作 - 失败。
========== 全部重新生成: 成功 9 个,失败 1 个,跳过 0 个 ==========

demoDll 出现的问题:

10>------ 已启动全部重新生成: 项目: demoDll, 配置: Release Win32 ------
10>StdAfx.cpp
10>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.16.27023\atlmfc\include\afxcmn.inl(400): error C2065: “TVIF_STATEEX”: 未声明的标识符
10>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.16.27023\atlmfc\include\afxcmn.inl(402): error C2065: “TVIF_EXPANDEDIMAGE”: 未声明的标识符
10>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.16.27023\atlmfc\include\afxcmn2.inl(270): error C2065: “RB_SETEXTENDEDSTYLE”: 未声明的标识符
10>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.16.27023\atlmfc\include\afxcmn2.inl(272): error C2065: “RB_GETEXTENDEDSTYLE”: 未声明的标识符
10>已完成生成项目“demoDLL.vcxproj”的操作 - 失败。
========== 全部重新生成: 成功 9 个,失败 1 个,跳过 0 个 ==========

 

顺利的将9个lib文件编译出,即可用。

 

参考链接

https://www.pianshen.com/article/48413895/   编译

CxImage的使用以及基本用法  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值