Visual Studio 2013编译libiconv-1.14

开篇提示:本文为本人原创,本文欢迎转载,但必须注明本文出处,例如。
“该文引用自 CruiseYoung的:Visual Studio 2013编译libiconv-1.14
http://blog.csdn.net/fksec/article/details/40378469”
否则说明阁下愿意支付以100元人民币每字计的稿费,敬请留意。

1 资料准备

1.1 参考资料:
libiconv-1.14 for windows(里面包含msvs10(Visual Studio 2010)工程):
http://download.csdn.net/detail/travel981cn/7127889
How to Build libiconv with Microsoft Visual Studio:
http://www.codeproject.com/Articles/302012/How-to-Build-libiconv-with-Microsoft-Visual-Studio
winlibs/libiconv(里面包含msvs6、msvs9、msvs11工程):
https://github.com/winlibs/libiconv
1.2 官方信息
网站:
https://savannah.gnu.org/projects/libiconv/
代码托管地址:
http://git.savannah.gnu.org/cgit/libiconv.git
1.3 代码下载:
1.3.1 下载“libiconv for msvs”代码
注意:将代码解压或下载到“libiconv_msvc”,此处是为了和下面1.3.2避免目录冲突,无其他原因。
地址:https://github.com/winlibs/libiconv
如果用“TortoiseGit”工具下载
地址:https://github.com/winlibs/libiconv.git
1.3.2 官方“libiconv”最新源代码
此处个人推荐用“TortoiseGit”工具下载
地址:http://git.savannah.gnu.org/cgit/libiconv.git

2 编译准备

2.1 将下载到的官方最新代码,即“libiconv”目录下的所有文件,拷贝到“libiconv_msvc\source”目录并覆盖。
2.2 修改“libiconv_msvc\source\lib\iconv.c”:在
#include <iconv.h>
语句后添加以下语句
#ifndef ICONV_CONST
# define ICONV_CONST
#endif
2.3 修改“libiconv_msvc\source\lib\flags.h”:在
#define ei_iso2022_jp2_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS | HAVE_HANGUL_JAMO)
语句后添加以下语句
#define ei_iso2022_jpms_oflags (HAVE_ACCENTS | HAVE_QUOTATION_MARKS | HAVE_HANGUL_JAMO)

3 编译

3.1 用Visual Studio 2013打开解决方案“libiconv_msvc\MSVC11\libiconv.sln”
3.2 对工程属性作如下更改:
3.2.1 工程libiconv_dll
3.2.1.1 配置属性-->常规-->常规-->目标文件名
由“$(ProjectName)”改为以下设置:
Debug:iconvD
Release:iconv
3.2.1.2 配置属性-->常规-->项目默认值-->字符集
统一改为“使用多字节字符集”
3.2.1.3 配置属性-->C/C++-->预处理器-->预处理器定义
将其中的“INSTALLPREFIX”、“INSTALLDIR”、“LIBDIR”三项的值统一定义为“"c:\\iconv"”,即:
INSTALLPREFIX="\\iconv";
INSTALLDIR="c:\\iconv";
LIBDIR="c:\\iconv";
3.2.1.4 配置属性-->C/C++-->预编译头-->预编译头
统一改为“不使用预编译头”
3.2.1.5 配置属性-->C/C++-->输出文件-->程序数据库文件名
统一改为$(IntDir)$(TargetName).pdb
3.2.1.6 配置属性-->连接器-->常规-->输出文件
统一改为$(OutDir)$(TargetName)$(TargetExt)
3.2.1.7 配置属性-->连接器-->调试-->生成程序数据库文件
统一改为$(OutDir)$(TargetName).pdb
3.2.1.8 配置属性-->连接器-->高级-->导入库
统一改为$(OutDir)$(TargetName).lib
3.2.2 工程libiconv_static
3.2.2.1 配置属性-->常规-->常规-->目标文件名
由$(ProjectName)改为以下设置:
Debug:iconvSD
Release:iconvS
3.2.2.2 同3.2.1.2~3.2.1.5
3.2.2.3 配置属性-->库管理器-->常规-->输出文件

统一改为$(OutDir)$(TargetName)$(TargetExt)

4 使用

include:
iconv.h
Dynamic:
Macro: #define LIBICONV_DLL
Debug:
lib: iconvD.lib
dll: iconvD.dll
pdb: iconvD.pdb
Release:
lib: iconv.lib
dll: iconv.dll
pdb: iconv.pdb
Static:
Debug:
lib: iconvSD.lib
pdb: iconvSD.pdb
Release:
lib: iconvS.lib

pdb: iconvS.pdb

5 整理后的工程

托管地址:https://github.com/CruiseYoung/libiconv_msvc

GNU libiconv-1.15和libintl-0.19.8.1,VS2015工程和 Makefile 命令行编译文件 CSDN-tags: libiconv1.15 libintl 0.19.8.1 VS2015 Makefile 声明: 代码为本人良心制作,虽然花费了一定的时间和精力,但不保证完全没有错误。如果您下载并使用了本代码,将其包含在您发布的应用中,给您带来了经济上,心理上,生活上的损失,本人不负有责任。 所有代码都基于官网进行修改,iconv的代码来源于libiconv-1.15的lib目录,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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值