WIN10 下 VS2015 编译libiconv-1.15

参考文章:http://blog.csdn.net/ghevinn/article/details/9834119
关于中文字符编码问题,这篇文章里面讲的很详细–>http://www.tuicool.com/articles/yIjiqm
UTF-8编码是用以解决国际上字符的一种多字节编码,是在互联网上使用最广的一种unicode的实现方式。它包含全世界所有国家需要用到的字符,是国际编码,通用性强。一般来说UTF-8可应用于大多数场景,尤其是互联网上,而中文编码主要使用GBK编码,因此这就有了GBK和UTF-8的相互转换需求。在linux平台下 libiconv 库来实现这种转换,参见libiconv 官网:http://www.gnu.org/software/libiconv/
但美中不足的是libiconv 的开发者并没有发布windows下的源码和库,所以要想在windows下使用libiconv 库,必须自己手动把libiconv 移植到windows平台,具体步骤如下:

1、去官网下载libiconv 源码包,本文使用的是libiconv-1.15.tar.gz
2、新建libiconv工程
(1)将下载的库中lib文件夹下的所有文件拷贝到这个文件夹下
(2)将烤入到libiconv\liniconv文件夹下的config.h.in重命名为config.h
(3)将库中libcharset/lib/localcharset.c文件拷贝到这个libiconv\liniconv文件夹下
(4)将库中include文件夹下iconv.h.in文件重命名为iconv.h放在libiconv\liniconv文件夹下
(5)将库中libcharset\include文件夹下localcharset.h.in文件重命名为localcharset.h放在libiconv\liniconv文件夹下
3、工程中添加现有项,将 iconv.c ,localcharset.c 添加到工程中.
4、工程属性->C/C++ –>附加包含目录:$(ProjectDir);
5、工程属性:常规->配置类型->静态库(.lib)
6、修改文件中的BUG
(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"  
    511行 :   sprintf  改成   sprintf_s ,参数也要修改,具体怎么改,看了代码一眼就知道 -->sprintf_s (buf, "CP%s", pdot + 1);
     521行: sprintf  改成   sprintf_s , sprintf_s (buf, "CP%u", GetACP ());

7:生成解决方案,可能会报几个警告.中间若是报错找不到
#include<iconv.h> 和 #include<localcharset.h> ,

将这几处修改为:

#include "iconv.h"#include "localcharset.h"

备注:
编译成功后,将第5步修改为【工程属性:常规->配置类型->动态库(.dll)】 编译即可得到动态库 libiconv.dll
将平台由Win32修改为x64,重新编译即可得到64位下的相关文件。

如果你觉得上述过程很麻烦,这里有现成VS2015工程,可以直接编译: https://download.csdn.net/download/xiao_lxl/10461943
如果是拿来主义,这里也有编译好的32位和64位的libiconv的lib和dll文件:https://download.csdn.net/download/xiao_lxl/10461950

GNU libiconv-1.15libintl-0.19.8.1,VS2015工程和 Makefile.mak 命令行编译文件 CSDN-tags: libiconv1.15 libintl 0.19.8.1 VS2015 Makefile 声明: 最新版,修正了relocatable.c文件中GetModuleFileName函数的问题。 代码为本人良心制作,虽然花费了一定的时间和精力,但不保证完全没有错误。如果您下载并使用了本代码,将其包含在您发布的应用中,给您带来了经济上,心理上,生活上的损失,本人不负有责任。 所有代码都基于官网进行修改,iconv的代码来源于libiconv-1.15lib目录,intl的代码来源于gettext-runtime的intl目录。 intl需要iconv的支持,如果想单独编译不需要iconv的intl, 请自行修改intl目录下的config.h文件, /* Define if you have the iconv() function and it works. */ #define HAVE_ICONV 1 /* Define to 1 if you have the header file. */ #define HAVE_ICONV_H 1 为: /* Define if you have the iconv() function and it works. */ /* #undef HAVE_ICONV */ /* Define to 1 if you have the header file. */ /* #undef HAVE_ICONV_H */ 并修改VS工程中预处理器定义,删掉/DDEPENDS_ON_LIBICONV=1 VS的工程为VS2015的工程文件,使用VC140工具集,如果没有2015,也可以用Makefile.mak文件来编译。 nmake /f Makefile.mak [DLL] [DEBUG] 指定 DLL=1 编译dll版本,默认是lib版本,libiconv.lib , libintl.lib。 指定 DEBUG=1 编译debug版本,默认是release版本。 同理,如果intl不需要iconv,请修改上面的配置文件选项,并, 删掉Makefile.mak中/DDEPENDS_ON_LIBICONV=1 配置文件的制作,参考了以下几处,修改的大概原则是,能定义的全定义了,就这样: https://github.com/kahrl/gettext-msvc 这个地址提供了libiconvlibintl的VS工程和配置文件。 https://github.com/winlibs 为编译PHP而修改的libiconvlibintl源码,libiconv是最新1.15版本,gettext不是。 附带的Cygwin目录中的工具 libiconv官方的制作文档,用cygwin配合VC,生成的配置文件。 欢迎同学们下载测试。有问题可以给我发邮件travel981cn@139.com
GNU libiconv-1.15libintl-0.19.8.1,VS2015工程和 Makefile 命令行编译文件 CSDN-tags: libiconv1.15 libintl 0.19.8.1 VS2015 Makefile 声明: 代码为本人良心制作,虽然花费了一定的时间和精力,但不保证完全没有错误。如果您下载并使用了本代码,将其包含在您发布的应用中,给您带来了经济上,心理上,生活上的损失,本人不负有责任。 所有代码都基于官网进行修改,iconv的代码来源于libiconv-1.15lib目录,intl的代码来源于gettext-runtime的intl目录。 intl需要iconv的支持,如果想单独编译不需要iconv的intl, 请自行修改intl目录下的config.h文件, /* Define if you have the iconv() function and it works. */ #define HAVE_ICONV 1 /* Define to 1 if you have the header file. */ #define HAVE_ICONV_H 1 为: /* Define if you have the iconv() function and it works. */ /* #undef HAVE_ICONV */ /* Define to 1 if you have the header file. */ /* #undef HAVE_ICONV_H */ 并修改VS工程中预处理器定义,删掉/DDEPENDS_ON_LIBICONV=1 VS的工程为VS2015的工程文件,使用VC140工具集,如果没有2015,也可以用Makefile.mak文件来编译。 nmake /f Makefile.mak [DLL] [DEBUG] 指定 DLL=1 编译dll版本,默认是lib版本,libiconv.lib , libintl.lib。 指定 DEBUG=1 编译debug版本,默认是release版本。 同理,如果intl不需要iconv,请修改上面的配置文件选项,并, 删掉Makefile.mak中/DDEPENDS_ON_LIBICONV=1 配置文件的制作,参考了以下几处,修改的大概原则是,能定义的全定义了,就这样: https://github.com/kahrl/gettext-msvc 这个地址提供了libiconvlibintl的VS工程和配置文件。 https://github.com/winlibs 为编译PHP而修改的libiconvlibintl源码,libiconv是最新1.15版本,gettext不是。 附带的Cygwin目录中的工具 libiconv官方的制作文档,用cygwin配合VC,生成的配置文件。 一大堆的宏和函数搞得我头晕脑涨。所以配置文件如果有错误,也在所难免,所有修改的文件,如config.h,iconv.h,libintl.h都附带了原始文件。 如: 配置文件 原始文件 DLL原始文件 LIB原始文件 config.h config.h.in iconv.h iconv.h.build.in iconv.h.in localcharset.h localcharset.h.build.in localcharset.h.in libgnuintl.h libgnuintl.in.h 欢迎同学们下载测试。有问题可以给我发邮件travel981cn@139.com
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值