解决在visualstudio2012调用exiv2库遇到的问题
来源:互联网 发布:thinkphp5商城源码 编辑:程序博客网 时间:2024/05/22 23:59
1 在http://www.exiv2.org/index.html网上下载了exiv2-0.26-msvc.tar这个压缩文件夹,因为我是用visualstudio2012来进行编程的,所以才下了这个。使用其他环境的同学可以下载另外配对的压缩文件。
2 下载完之后,将压缩文件解压,解压完成后进入exiv2-0.26-msvc\dist\2012\Win32\dll\Release,就可以看到exiv2里面的库文件目录以及include目录
3 在visualstudio2012下新建一个空项目,点击确认之后,在源文件目录下新建一个main.cpp文件
4 右键点击Project项目,选择属性,选择VC++目录,点击包含目录,将include文件夹所在路径添加进去,在这里我的目录是D:\GoogleDownload\exiv2-0.26-msvc\dist\2012\Win32\dll\Release\include
5 添加完包含目录后接下来添加库目录。选择库目录,编辑,将lib文件夹的路径添加进去。添加完成后就进行连接器的配置了。
6 在属性页找到连接器->输入->附加依赖项,编辑,把lib文件夹下的库文件名称写进去。这里要注意的是我把所有的库文件名称都写进去了,也可以只写你需要的,比如exiv2.lib,点击确定之后,基本配置就算完成了。
7 将exiv2网站上的测试代码一,复制粘贴到我们的main.cpp文件中。
// ***************************************************************** -*- C++ -*-// exifprint.cpp, $Rev: 3090 $// Sample program to print the Exif metadata of an image#include <exiv2\exiv2.hpp>#include <iostream>#include <iomanip>#include <cassert>int main(int argc, char* const argv[])try { if (argc != 2) { std::cout << "Usage: " << argv[0] << " file\n"; return 1; } Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open(argv[1]); assert(image.get() != 0); image->readMetadata(); Exiv2::ExifData &exifData = image->exifData(); if (exifData.empty()) { std::string error(argv[1]); error += ": No Exif data found in the file"; throw Exiv2::Error(1, error); } Exiv2::ExifData::const_iterator end = exifData.end(); for (Exiv2::ExifData::const_iterator i = exifData.begin(); i != end; ++i) { const char* tn = i->typeName(); std::cout << std::setw(44) << std::setfill(' ') << std::left << i->key() << " " << "0x" << std::setw(4) << std::setfill('0') << std::right << std::hex << i->tag() << " " << std::setw(9) << std::setfill(' ') << std::left << (tn ? tn : "Unknown") << " " << std::dec << std::setw(3) << std::setfill(' ') << std::right << i->count() << " " << std::dec << i->value() << "\n"; }std::cin.get(); return 0;}//catch (std::exception& e) {//catch (Exiv2::AnyError& e) {catch (Exiv2::Error& e) { std::cout << "Caught Exiv2 exception '" << e.what() << "'\n"; return -1;}
注意,网站上的代码使用了int main(int argc, char* const argv[]),这样的主函数调用方式,后面也是用了argv[1]。因此我们在首先在资源文件目录下添加一张等下我们要分析头文件的jpg图片
然后在Project/Project1文件夹下添加该图片。
之后右键Project1项目,选择属性,然后在配置属性下的调试命令的命令参数下写上你的jpg图片名称,在这里我写入了"1.jpg",注意,这里一定要加上双引号,而且是英文输入下的,这个参数就是到时程序使用的argv[1]。
添加完成就可以编译运行了,在运行的时候会出现下面几个问题:
8 接下来就是visualstudio2012会弹出的几个问题,以及我是如何解决的,我相信完成这些配置之后,各位点击编译运行之后各位肯定也会遇到这些问题。
8.1 第一个问题:由于找不到exiv2.dll,无法继续执行代码。重新安装程序可能会解决此问题。
遇到这个问题,只需要找到刚刚exiv2-0.26-msvc\dist\2012\Win32\dll\Release\bin文件夹下exiv2.dll,expat.dll,zlib.dll三个文件,将它们复制到C:\Windows\SysWOW64文件夹中即可。
8.2 第二个问题:0x6CE57132(msvcr110.dll)(Project1.exe中)处有未处理的异常,读取位置时发生访问冲突。
出现这个问题应该算是visualstudio2012自己的问题了,具体原因我也不是很清楚,不过visualstudio2013、2015貌似也出现过这种问题,应该算是bug吧,解决方法如下:
右键Project1选择属性->配置属性-C/C++->代码生成->运行库,将多线程调试 DLL (/MDd)修改成 多线程 (/MT),就可以了。
9 解决完上面所有的问题,就可以正常的运行程序了,运行结果如下
顺利得到了我们要的JPEG头文件的信息了。
- 解决在visualstudio2012调用exiv2库遇到的问题
- 解决在使用Amoeba遇到的问题
- VisualStudio2012的序列号
- cxf调用.net webservice 接口遇到的问题(尚未解决)
- 解决VS 2010调用OpenGL时遇到的问题
- Android 调用系统相机拍照并且显示在相册中,以及中间可能会遇到的一些问题的解决
- VC下MFC,调用Com类型库遇到的问题的解决
- 在使用KSoap2调用webservice遇到的问题
- ::GetDlgItem调用 窗口控件遇到的中断 (自己遇到的问题,已被解决)
- 在directshow的filter里调用ffmpeg库遇到的几个头疼的问题
- 如何解决在使用MS产品时遇到的问题
- 解决在安装Arm-elf-tools 时遇到的问题
- 解决项目在发布时遇到的问题
- IOS在发布APP时遇到的问题及解决
- 本人在使用PopupMenu,遇到的问题,和解决过程
- 在搭建mysql集群中遇到的问题,求解决
- 在win32 安装matplotlib,numpy遇到的问题及解决
- 解决zabbix在configure时候遇到的问题(Ubuntu)
- callback使用与闭包
- 负载均衡架构及实现
- LintCode 第491题 回文数
- TensorFlow简单实例(三):nearest_neighbor
- http://blog.csdn.net/sfM06sqVW55DFt1/article/details/78739735
- 解决在visualstudio2012调用exiv2库遇到的问题
- 求1+2+3+...+n
- Android图表库MPAndroidChart(九)——神神秘秘的散点图
- Hadoop入门之命令参考
- Gradle入门系列(5):创建多项目构建
- PG通用(常用)功能
- HTTP与HTTPS的区别
- Mac最强虚拟机软件Parallels Desktop xx版13.2.0
- 【笔记】PHP- array_push() 还有JSON