VS2015环境下编译CxImage702

虽然有OpenCV等可用,但是CxImage有时候还是很好用的,小巧、灵活,所以这里记录下vs2015编译CxImage时的问题。

1 源码下载

CxImage7.02下载,好像从2011年开始就不更新了。
下载压缩包cximage702_full.7z,解压到任意目录,我解压到E:\cximage702_full目录。

2 打开解决方案

VS2015打开CxImageFull_vc10.sln,会提示升级VC++编译器和库,确定,会看到解决方案中包含了14个工程,简单介绍一下各个工程的作用:

  1. cxImage:静态库,位置位于cximage702_full\CxImage
  2. cximagecrtdll:C运行时动态连接库,位置位于cximage702_full\CxImage\CxImageDLL
  3. cximagemfcdll:MFC扩展动态链接库,位置位于cximage702_full\CxImage\CxImageDLL
  4. demo和demodll都是用于测试以上几个库的示例程序,位置位于cximage702_full\demo
  5. 其余9个均为以上几个库的部件静态库。

3 编译

3.1 尝试编译

先尝试直接编译,会得到以下结果

========== 生成: 成功 9 个,失败 5 个,最新 0 个,跳过 0 个 ==========

错误主要为以下三类:

error C2371: “int_fast16_t”: 重定义;不同的基类型
fatal error C1041: 无法打开程序数据库“E:\cximage702_full\demo\Debug\vc140.pdb”;如果要将多个 CL.EXE 写入同一个 .PDB 文件,请使用 /FS
fatal error LNK1104: 无法打开文件“../cximage/CxImageDLL/Debug/cximagecrtd.lib”

右键单独生成后9个部件静态库,都可以编译成功。
右键单独生成cximage,提示两个错误:

1>d:\program files (x86)\microsoft visual studio 14.0\vc\include\stdint.h(36): error C2371: “int_fast16_t”: 重定义;不同的基类型
1>  e:\cximage702_full\cximage\stdint.h(107): note: 参见“int_fast16_t”的声明
1>d:\program files (x86)\microsoft visual studio 14.0\vc\include\stdint.h(40): error C2371: “uint_fast16_t”: 重定义;不同的基类型
1>  e:\cximage702_full\cximage\stdint.h(111): note: 参见“uint_fast16_t”的声明

我的处理是把cximage下对应的声明屏蔽掉,即双击以上第2和第4行,把对应程序行屏蔽,然后:
右键单独生成cximage,成功。生成了静态链接库lib
右键单独生成cximagecrtdll,也成功,生成了DLL库和lib
右键单独生成cximagemfcdll,出现以下错误:

1>LINK : fatal error LNK1104: 无法打开文件“.\Debug\png.lib”
========== 生成: 成功 0 个,失败 1 个,最新 9 个,跳过 0 个 ==========

于是检查xcimagemfcdll的属性->链接器->输入->附加依赖项,发现链接的全是诸如$(OutDir)png.lib等,查看$(OutDir)是.\Debug\,即E:\cximage702_full\CxImage\CxImageDLL\Debug,而那几个部件静态库输出的lib却是在$(SolutionDir)$(Configuration)\,即E:\cximage702_full\Debug下,所以链接时完全找不到这些lib,不知道这是VS2015转换时出了问题,还是作者原来就这么设置的。

3.2 修改工程属性设置

  1. 打开cximagecrtdll属性页,
    配置选择所有配置,平台选择X64,修改链接器->输入->附加依赖项
    把原来所有…\…\x64\$(OutDir)均改为$(SolutionDir)$(Platform)\$(Configuration)\
  2. 打开cximagemfcdll属性页,与以上类似
    配置选择所有配置,平台选择Win32,修改链接器->输入->附加依赖项
    把原来$(OutDir)均改为$(SolutionDir)$(Configuration)
    配置选择所有配置,平台选择X64,修改链接器->输入->附加依赖项
    .\x64\$(OutDir)均改为$(SolutionDir)$(Platform)\$(Configuration)\

3.3 再次编译

以上修改完后,cximagecrtdll以及cximagemfcdll在Win32平台下的Debug和Release都可以编译成功了。
但是编译x64版本时,又遇到问题了,两个都编译不过去,出现以下错误

error MSB8020: The build tools for Windows7.1SDK (Platform Toolset = 'Windows7.1SDK') cannot be found. To build using the Windows7.1SDK build tools, please install Windows7.1SDK build tools.  Alternatively, you may upgrade to the current Visual Studio tools by selecting the Project menu or right-click the solution, and then selecting "Retarget solution".

分别打开cximagecrt以及cximagemfcdll的属性页,平台选x64,常规->平台工具集:要改为Visual Studio 2015 (v140),再编译,成功。
此时静态库和动态库都已经编译成功。

4 编译输出文件

4.1 cxImage静态库:

32位Debug:E:\cximage702_full\Debug\cximage.lib
32位Release:E:\cximage702_full\Release\cximage.lib
64位Debug:E:\cximage702_full\x64\Debug\cximage.lib
64位Release:E:\cximage702_full\x64\Release\cximage.lib

4.2 cximagecrtdll:C运行时动态连接库

4.2.1 Debug版(32位和64位都是这个位置)

E:\cximage702_full\bin\cximagecrtd.dll
E:\cximage702_full\CxImage\CxImageDLL\Debug\cximagecrtd.lib

4.2.2 Release版(32位和64位都是这个位置)

E:\cximage702_full\bin\cximagecrt.dll
E:\cximage702_full\CxImage\CxImageDLL\Release\cximagecrt.lib

4.3 cximagemfcdll:MFC扩展动态链接库

4.3.1 Debug版(32位和64位都是这个位置)

E:\cximage702_full\bin\cximaged.dll
E:\cximage702_full\CxImage\CxImageDLL\Debug\cximaged.lib

4.3.2 Release版(32位和64位都是这个位置)

E:\cximage702_full\bin\cximage.dll
E:\cximage702_full\CxImage\CxImageDLL\Release\cximage.lib

注意

从以上看,按照现在这种配置,同时编译32位和64位时,要注意,由于两者输出的目标位置是相同的,所以编译完32位或64位后,如果需要编译另一种平台的,注意要把前面编译好的文件拷走,否则后面再编译另一平台版本,就覆盖了,最后会很糊涂的。
本来应该能从配置里规避这个问题的,但是想想比较麻烦,编译也不是经常的事,所以就不改了。

5 使用

以上编译出的这些库就可以拷走去用了,用的时候还需要包含头文件,就是位于E:\cximage702_full\CxImage目录下的那些.h文件。
至于demo和demodll是测试用的程序,如果感兴趣可以编译一下运行看看,我就不编了。

猜你喜欢

转载自blog.csdn.net/hangl_ciom/article/details/88855568
今日推荐