关键字:VS2008 编译 iconv windows
小巧的开源编码转换库,不用多说了吧~:)
一、首先准备文件:
1. 下载 Iconv 库,目前最新为 1.31
http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz
2. 去 www.d2school.com 下载iconvpp
(这个不是必须的,但其提供了C++的封装,使用起来很方便,感谢nanyu老师)。
libiconv-1.13.1.tar.gz 解压到 zipDir
创建 解决方案目录 ProjectDir
zipDir:IConv的打包文件解压目录
ProcjectDir : 工程编译主目录
二、合并文件
1. 复制 iconvpp.cpp 到 ProjectDir
2. 复制 ZipDir/Lib/下的所有文件到 ProjectDir/_IConv/ (包括子文件夹)
3. 复制 ZipDir/Include/IConv.h.in 到 ProjectDir/_IConv/IConv.h
4. 复制 ZipDir/scrLib/localcharset.h 到 ProjectDir/_IConv/
5. 复制 ZipDir/libcharset/lib/localcharset.c 到 ProjectDir/_IConv
6. 改名 ProjectDir/_IConv/Config.h.in -> config.h
以下是批处理
@echo 将所有文件复制到这个目录下 :_IConv
pause
md _IConvcopy lib\* _IConv\
copy include\IConv.h.in _IConv\IConv.h
copy srcLib\localcharset.h _IConv\
copy libcharset\lib\localcharset.c _IConv\
ren _IConv\Config.h.in Config.h@echo 目录文件生成成功。
pause
OK 以上完成了全部文件的准备(在_IConv下)。
三、下面用VS2008建工程~:
1. 建一个Win32 工程,工程名称为IconvLib ,钩选“创建解决方案目录”,选择"静态链接库", 不选“预编译头”,完成。
2. 将 _IConv 目录 复制过来。
3. 将 iconvpp 中的 include 与 src 复制过来。
目录结构如下:
─ProjectDir
├─IconvLIB
├─iconvpp
│ ├─include
│ │ └─iconvpp
│ └─src
└─_IConv
4. 添加现有项,将 iconvpp.cpp , iconv.c ,localcharset.c 添加到工程中.
5. 工程属性->C/C++ –>附加包含目录:../_iconv;../iconvpp/include;
6. 工程属性->C/C++ ->代码生成->运行时库->多线程调试(/MTd)
这时如果编译会有一堆错误,下面我们来修改一些位置。
四、修改文件内容:
1. IConv.h :
1).删除掉所有的 @ 符号 (14处)
2).修改25行: extern DLL_VARIABLE int _libiconv_version;为 extern /*DLL_VARIABLE*/ int _libiconv_version;
3).修改83行:extern size_t iconv (iconv_t cd, ICONV_CONST char* * inbuf, size_t *inbytesleft, char* * outbuf, size_t *outbytesleft);为 extern size_t iconv (iconv_t cd, const char* * inbuf, size_t *inbytesleft, char* * outbuf, size_t *outbytesleft);
2. localcharset.c:
注释掉76行: # include "configmake.h"
OK 文件修改完成,这时候编译,就可以通过了~。
五、测试
新建一个控制台工程。
设置工程属性头文件包含:_iconv和 iconvpp/include 两个目录。
链接 debug/IconvLIB.lib
运行时库->多线程调试(/MTd)
#include "iconvpp\iconvpp.h"
using namespace Iconvpp;
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
string str;
str= Utf8Convert::from_wstring(L"This is a test string~");
printf("%s",str.c_str());
return 0;
}
最终目录结构如下:
─ProjectDir
├─Debug
├─ExeTest
│ └─Debug
├─IconvLIB
│ └─Debug
├─iconvpp
│ ├─include
│ │ └─iconvpp
│ └─src
└─_IConv
六、 结束