初次编译cximage遇到的一些错误
在网上下载了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遇到的一些错误相关推荐
- Uboot初次编译、烧写、启动(启动界面log简析)
目录 U-Boot 初次编译 U-Boot 烧写与启动 上述笔记第三点就是建立shell脚本实现的 第四点就是修改Makefile文件实现的,下面均有实现步骤讲解. U-Boot 初次编译 先编译体验 ...
- 编译mysql4.0时候出现错误提示checking LinuxThreads... Not found
编译mysql4.0时候出现错误提示checking "LinuxThreads"... "Not found" 2009-06-30 18:25 解压mysq ...
- Linux 内核获取、初次编译、源码目录分析
目录 Linux 内核获取 Linux 内核初次编译 Linux 内核源码目录分析 1.arch 目录 2.block 目录 3.crypto 目录 4.Documentation 目录 5.driv ...
- 关于预编绎网站的问题[已预编译此应用程序的错误]
关于预编绎网站的问题[已预编译此应用程序的错误] 当我们开发完项目后发布网站时,会生成一个PrecompiledApp.config文件, PrecompiledApp.config 文件主要用于跟踪 ...
- Linux学习笔记---初次编译Uboot系统
在初次编译Uboot系统时,是按照正点原子开发指南操作的,但是开发指南上讲得不是很详细,又看了一遍视频教程才搞清楚完整步骤,为了方便学习,就将详细步骤记录下来,以便以后参考. Uboot初次编译 1. ...
- 使用AndroidStudio编译NDK的方法及错误解决方式
使用AndroidStudio编译NDK的方法及错误解决方式 参考文章: (1)使用AndroidStudio编译NDK的方法及错误解决方式 (2)https://www.cnblogs.com/me ...
- 解决Windows上编译PHP7.1拓展的错误
转载请注明文章出处:https://tlanyan.me/solve-buil... 接上篇Windows编译PHP7.2拓展,以为编译PHP7.1的拓展应该水到渠成,马到成功.哪知道编译PHP7.1 ...
- 在Idea2017.1中编译时发生如下的错误
错误 在Idea2017.1中编译时发生如下的错误 Information:java: javacTask: 源发行版 1.8 需要目标发行版 1.8 Information:java: Errors ...
- VS 编译出现,LNK2005 连接错误解决办法
编译链接时出现以下错误: 1>nafxcwd.lib(dllmodul.obj) : error LNK2005: DllMain 已经在 LIBCMTD.lib(dllmain.obj) 中定 ...
- ROS-Melodic 编译Moveit全过程记录和错误解决方案
ROS-Melodic 编译Moveit全过程记录和错误解决方案 在Ros Melodic版本下,直接运行sudo apt-get install ros-melodic-moveit会出现以下错误: ...
最新文章
- 大数据分析:Java 下降,华为平均月薪高达 35K,分析 89 万招聘数据有这些发现!
- 实战Kaggle比赛(1):树叶分类
- oracle-bone,Oracle Bone Inscriptions / 甲骨文
- zabbix2.0安装与配置
- win08跟linux,Win 8 PK Linux!八大优势助微软完胜
- 我有一张1996年版一元钱,值多少钱?
- 【LeetCode】141. Linked List Cycle (2 solutions)
- 用qt的qml写的安卓摄像头程序
- 手写分页sql_MyBatis-Plus 分页查询以及自定义sql分页的实现
- matlab2010激活问题
- 荣耀 android 11 rom,华为荣耀10官方固件rom刷机包_华为荣耀10完整版系统升级包
- CGB2202API基础第1天
- 大学生体育课期末大作业
- 又一款数据分析神器:Polars 真的很强大
- java从学号中提取班级_如何实现表间查询并提取班级号
- 智慧树期末考试可以切换页面吗_智慧树考试可以切换界面吗?中途可以退出吗...
- RTMP流媒体直播资料
- Pinterest先辈Wists的创业故事
- linux proc 文件系统下 entry 的解释(转)
- Abaqus GUI程序开发之常用的Abaqus内核指令(一)