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

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

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

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

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

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<char,class StrTraitMFC_DLL<char,class ATL::ChTraitsCRT<char> > > 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 <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

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

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下

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

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

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

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

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

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

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

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

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

 

初次编译cximage遇到的一些错误相关推荐

  1. Uboot初次编译、烧写、启动(启动界面log简析)

    目录 U-Boot 初次编译 U-Boot 烧写与启动 上述笔记第三点就是建立shell脚本实现的 第四点就是修改Makefile文件实现的,下面均有实现步骤讲解. U-Boot 初次编译 先编译体验 ...

  2. 编译mysql4.0时候出现错误提示checking LinuxThreads... Not found

    编译mysql4.0时候出现错误提示checking "LinuxThreads"... "Not found" 2009-06-30 18:25 解压mysq ...

  3. Linux 内核获取、初次编译、源码目录分析

    目录 Linux 内核获取 Linux 内核初次编译 Linux 内核源码目录分析 1.arch 目录 2.block 目录 3.crypto 目录 4.Documentation 目录 5.driv ...

  4. 关于预编绎网站的问题[已预编译此应用程序的错误]

    关于预编绎网站的问题[已预编译此应用程序的错误] 当我们开发完项目后发布网站时,会生成一个PrecompiledApp.config文件, PrecompiledApp.config 文件主要用于跟踪 ...

  5. Linux学习笔记---初次编译Uboot系统

    在初次编译Uboot系统时,是按照正点原子开发指南操作的,但是开发指南上讲得不是很详细,又看了一遍视频教程才搞清楚完整步骤,为了方便学习,就将详细步骤记录下来,以便以后参考. Uboot初次编译 1. ...

  6. 使用AndroidStudio编译NDK的方法及错误解决方式

    使用AndroidStudio编译NDK的方法及错误解决方式 参考文章: (1)使用AndroidStudio编译NDK的方法及错误解决方式 (2)https://www.cnblogs.com/me ...

  7. 解决Windows上编译PHP7.1拓展的错误

    转载请注明文章出处:https://tlanyan.me/solve-buil... 接上篇Windows编译PHP7.2拓展,以为编译PHP7.1的拓展应该水到渠成,马到成功.哪知道编译PHP7.1 ...

  8. 在Idea2017.1中编译时发生如下的错误

    错误 在Idea2017.1中编译时发生如下的错误 Information:java: javacTask: 源发行版 1.8 需要目标发行版 1.8 Information:java: Errors ...

  9. VS 编译出现,LNK2005 连接错误解决办法

    编译链接时出现以下错误: 1>nafxcwd.lib(dllmodul.obj) : error LNK2005: DllMain 已经在 LIBCMTD.lib(dllmain.obj) 中定 ...

  10. ROS-Melodic 编译Moveit全过程记录和错误解决方案

    ROS-Melodic 编译Moveit全过程记录和错误解决方案 在Ros Melodic版本下,直接运行sudo apt-get install ros-melodic-moveit会出现以下错误: ...

最新文章

  1. 大数据分析:Java 下降,华为平均月薪高达 35K,分析 89 万招聘数据有这些发现!
  2. 实战Kaggle比赛(1):树叶分类
  3. oracle-bone,Oracle Bone Inscriptions / 甲骨文
  4. zabbix2.0安装与配置
  5. win08跟linux,Win 8 PK Linux!八大优势助微软完胜
  6. 我有一张1996年版一元钱,值多少钱?
  7. 【LeetCode】141. Linked List Cycle (2 solutions)
  8. 用qt的qml写的安卓摄像头程序
  9. 手写分页sql_MyBatis-Plus 分页查询以及自定义sql分页的实现
  10. matlab2010激活问题
  11. 荣耀 android 11 rom,华为荣耀10官方固件rom刷机包_华为荣耀10完整版系统升级包
  12. CGB2202API基础第1天
  13. 大学生体育课期末大作业
  14. 又一款数据分析神器:Polars 真的很强大
  15. java从学号中提取班级_如何实现表间查询并提取班级号
  16. 智慧树期末考试可以切换页面吗_智慧树考试可以切换界面吗?中途可以退出吗...
  17. RTMP流媒体直播资料
  18. Pinterest先辈Wists的创业故事
  19. linux proc 文件系统下 entry 的解释(转)
  20. Abaqus GUI程序开发之常用的Abaqus内核指令(一)

热门文章

  1. SQL内连接和外连接的区别、where和on的区别详细介绍
  2. netty 百度网盘 密码
  3. SAP Query创建教程
  4. steam加速_Steam玩家试用追梦加速器后,怎么说?
  5. idea:java注释模板配置
  6. Python 爬虫对链家网广州二手房源信息的处理与可视化分析
  7. 几个比较好的app开发框架
  8. 【教学类-07-02】20220330 5以内加减法不重复题 及生成word打印docx纸(方法二)(Python VS)
  9. oppo 系列手机刷机教程
  10. php 字符串长度的解释