初次编译cximage遇到的一些错误

在网上下载了cximage的7.02版本,用VS2017打开,遇到一些编译错误,把解决过程记录下来。

1、我打开的是CxImageFull_vc10.sln文件,编译CxImageFull_vc10.sln需要MFC开发环境(Console和Console_vc10可以不需要),打开会提示升级工具集,点击确定。

初次编译cximage遇到的一些错误_第1张图片

2、打开工程默认都是Win32 Debug配置,就说下Win32 Debug版本,工程列表如下图

初次编译cximage遇到的一些错误_第2张图片

3、在所有工程中cximagecrtdll和cximagemfcdll使用的是多字节字符,其他的都是Unicode字符集,需要将所有工程改为多字节字符或者Unicode字符集。

初次编译cximage遇到的一些错误_第3张图片

初次编译cximage遇到的一些错误_第4张图片

如果不修改,直接编译会出现下面的错误(假设其他的错误已经解决)

1>demoDoc.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall CxImage::CxImage(char const *,unsigned int)" (??0CxImage@@QAE@PBDI@Z),该符号在函数 "public: virtual int __thiscall CDemoDoc::OnOpenDocument(char const *)" (?OnOpenDocument@CDemoDoc@@UAEHPBD@Z) 中被引用
1>demoDoc.obj : error LNK2019: 无法解析的外部符号 "public: static unsigned int __cdecl CxImage::GetTypeIdFromName(char const *)" (?GetTypeIdFromName@CxImage@@SAIPBD@Z),该符号在函数 "public: int __thiscall CDemoDoc::FindType(class ATL::CStringT > > const &)" (?FindType@CDemoDoc@@QAEHABV?$CStringT@DV?$StrTraitMFC_DLL@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@@Z) 中被引用
1>demoDoc.obj : error LNK2019: 无法解析的外部符号 "public: bool __thiscall CxImage::Load(char const *,unsigned int)" (?Load@CxImage@@QAE_NPBDI@Z),该符号在函数 "public: virtual int __thiscall CDemoDoc::OnOpenDocument(char const *)" (?OnOpenDocument@CDemoDoc@@UAEHPBD@Z) 中被引用
1>demoDoc.obj : error LNK2019: 无法解析的外部符号 "public: bool __thiscall CxImage::Save(char const *,unsigned int)" (?Save@CxImage@@QAE_NPBDI@Z),该符号在函数 "public: virtual int __thiscall CDemoDoc::OnSaveDocument(char const *)" (?OnSaveDocument@CDemoDoc@@UAEHPBD@Z) 中被引用
1>demo.exe : fatal error LNK1120: 4 个无法解析的外部命令

4、工程最好从下到上一个一个编译,如果出错,容易找到具体出错的位置,png和jpeg等这些库都是第三方的图像库,直接编译不会有什么错。如果有依赖工程,先编译依赖工程,demodll依赖于cximagecrtd.lib,所以要先编译cximagecrtdll工程,demo是生成最终输出文件的工程,放到最后编译。编译cximagecrtdll或者cximage工程时会出现下面的错误

error C2371: “int_fast16_t”: 重定义;不同的基类型

这是因为系统有个stdint.h文件,该工程下也有这个文件CxImage/stdint.h,而且定义是一样的,查找后发现CxImage/ximadef.h包含了这个头文件stdint.h,是下面的形式

#if defined(WIN32) || defined(_WIN32_WCE)
 #include "stdint.h"
#endif

#if !defined(WIN32) && !defined(_WIN32_WCE)

#include 
#include 
#include 
#include 

由于定义了WIN32宏,编译的就是上面那句,我把双引号改为尖括号(#include"stdint.h"=>#include),让它引用系统的文件,再次编译就不会提示这个错误了,具体这里为什么这么包含我也不太清楚。

5、编译cximagemfcdll工程时出现下面的错误

LINK : fatal error LNK1104: 无法打开文件“.\Debug\png.lib”

这里肯定是路径不对,找不到png.lib文件,查看工程属性的链接器依赖项,依赖库的目录是在输出目录下$(OutDir)

$(OutDir)png.lib
$(OutDir)jpeg.lib
$(OutDir)zlib.lib

而cximagemfcdll工程所在目录是CxImage\CxImageDLL,再看输出目录设置是在当前目录的Debug下初次编译cximage遇到的一些错误_第5张图片

png.lib的在解决方案目录下的Debug下,所以可以修改依赖库目录或者输出文件路径,依赖库目录可以改成下面的形式

../../Debug/png.lib
../../Debug/jpeg.lib
../../Debug/zlib.lib

6、编译成功后,将demo工程设置为启动项,启动调试,这时会跳出下面的错误框

初次编译cximage遇到的一些错误_第6张图片

未找到DEBUG目录下的demo.exe文件,查看属性输出目录和输出文件位置不一致

初次编译cximage遇到的一些错误_第7张图片

初次编译cximage遇到的一些错误_第8张图片

输出目录是"$(SolutionDir)$(Configuration)\",输出文件路径是"../bin/demod.exe",调试会启动输出目录下的文件,可以查看配置属性=>调试=>命令,看到调试的路径为$(TargetPath)。

初次编译cximage遇到的一些错误_第9张图片

将命令属性修改为输出文件的路径

初次编译cximage遇到的一些错误_第10张图片

看下bin目录下是否生成了demod.exe

初次编译cximage遇到的一些错误_第11张图片

7、启动调试,一切正常的话就能打开demo窗口了

初次编译cximage遇到的一些错误_第12张图片

64位编译也是差不多问题,修改下就可以编译成功。如果在VS内切换为X64编译项,查看cximagemfcdll和cximagecrtdll属性,平台工具集会显示未安装,编译也会提示错误,只要下拉改为现有平台工具集就可以了

初次编译cximage遇到的一些错误_第13张图片 初次编译cximage遇到的一些错误_第14张图片

你可能感兴趣的:(C/C++,cximage编译)