本人目前在windows下使用ffmpeg,需要添加fontconfig,而fontconfig依赖iconv;故而需要用vs2017编译iconv静态库,64位版本。
本人参考了博客:windows下使用VS编译libIconv库
但是我觉得还是有必要再写一份,主要是代码结构搭建方面的调整。
1.去http://ftp.gnu.org/pub/gnu/libiconv/ 下载源码包,本人下载的是libiconv-1.16.tar.gz
2.新建libiconv空的控制台工程,改工程为静态库,64位版本
目录如下
进入libiconv目录,如下所示,是解决方案目录,此目录里面的libiconv是工程目录
现在libiconv工程下面没有.h和.c文件,需要往工程libiconv添加文件进行编译。
a)拷贝libiconv-1.16下的config.h.in到工程目录,重命名为config.h
b)拷贝libiconv-1.16/include下的iconv.h.in到工程目录,重命名为iconv.h
c)拷贝libiconv-1.16/libcharset/lib下的localcharset.c到工程目录
d)拷贝libiconv-1.16/lib下的iconv.c到工程目录
e)拷贝libiconv-1.16/libcharset/include下的localcharset.h.in到工程目录,重命名为localcharset.h
至此拷贝文件工作完成,工程目录如下所示:
这个比较好,只有两个.c文件。
然后将这两个.c文件添加到工程,如下所示:
3.头文件包含路径配置
iconv编译需要引用一堆头文件,位于路径libiconv-1.16/include目录,以及libiconv-1.16/lib目录,当前目录,将这三个目录添加到工程的头文件包含路径下,如下所示:
4.修改文件中的BUG
这部分是照搬参考博客,打开文件iconv.h
a)删掉所有的@符号,一共删除了14项
b)查找变量_libiconv_version,修改extern DLL_VARIABLE int _libiconv_version为extern /DLL_VARIABLE/ int _libiconv_version,即注释掉DLL_VARIABLE
c)修改函数iconv,去掉ICONV_CONST char* * inbuf前面的ICONV_CONST修饰,同理iconv.c里面对应的函数实现也需要将ICONV_CONST去掉
5.编译
a)首先报如下错误
将_CRT_SECURE_NO_WARNINGS添加到预处理器即可
b)接着编译,报如下错误
双击对应的错误,到具体错误位置,如下所示:
在EILSEQ上鼠标右键,转到定义,会发现有两个查找结果,如下所示:
我们打开第一个头文件errno.h,如下所示,发现EILSEQ为42
然后在头文件loop_unicode.h的开始部分,将此宏定义添加进来。
c)继续编译,结果ok。
生成的静态库如下所示:
最后本文对整个如下目录进行压缩,并上传百度网盘,提供下载地址,用户下载后,直接打开libiconv的sln即可进行编译。
链接:https://pan.baidu.com/s/1ZWpn_7MUaqavY6tuH_oefA
提取码:1234