当前位置: 首页 > news >正文

在windows下编译libiconv库

libiconv是一个基于GNU协议的开源库,主要用于解决多语言编码处理转换等应用问题。在linux系统使用比较方便,但是windows下使用需要进行源码编译。这里我是使用libiconv的1.15版本源码和VS2019默认工具集配置进行编译。

首先需要用VS2019创建一个空项目,根目录为libiconv。

在解压源码文件后,我以libiconv-1.15为根目录,需要拷贝几个文件到上面创建的空项目。

        libiconv-1.15/config.h.in  ->  libiconv/config.h

        libiconv-1.15/libcharset/include/localcharset.h.in -> libiconv/localcharset.h

        libiconv-1.15/libcharset/lib/localcharset.c -> libiconv/localcharset.c

        libiconv-1.15/include/iconv.h.in -> libiconv/iconv.h

        libiconv-1.15/srclib/localcharset.h -> libiconv/localcharset.h

        libiconv-1.15/lib(整个文件夹) -> libiconv/lib

将上面拷贝的文件添加到空项目中,lib文件夹中只需要添加iconv.c。

接着需要修改VS2019项目的一些属性

        项目属性 : 常规->配置类型->静态库选择(.lib)
        项目属性 : C/C++ ->附加包含目录填入$(ProjectDir);

最后修改编译出现的错误。

        1. 修改iconv.h文件,删除掉所有的 @ 符号 (14处)

        2. 修改iconv.h文件,[extern DLL_VARIABLE int _libiconv_version;](24行) 改为 [extern /* DLL_VARIABLE */ int _libiconv_version;]

        3. 修改iconv.h文件,[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);]

        4. 修改iconv.c文件,[size_t iconv (iconv_t icd, ICONV_CONST char* * inbuf, size_t *inbytesleft, char* * outbuf, size_t *outbytesleft)]改为
                           [size_t iconv (iconv_t icd, const char* * inbuf, size_t *inbytesleft, char* * outbuf, size_t *outbytesleft)]
        
        4. 修改localcharset.c文件,注释  # include "configmake.h"

        5. 在项目属性 C/C++ -> 预处理器 -> 预处理器定义 增加_CRT_SECURE_NO_WARNINGS

此时编译可以成功,生成一个libiconv.lib库,体积大约3145K

相关文章:

  • 基于JavaWeb+SSM+Vue微信小程序的科创微应用平台系统的设计和实现
  • HarmonyOS--ArkTS(1)--基本语法(1)
  • 【Python网络爬虫入门教程1】成为“Spider Man”的第一课:HTML、Request库、Beautiful Soup库
  • 使用Java实现基数排序算法
  • Windows 和 MacOS 上安装配置ADB(安卓调试桥)
  • 【人生苦短,我学 Python】(5)集合数据类型(set、frozenset)
  • 【小沐学Python】Python实现TTS文本转语音(speech、pyttsx3、百度AI)
  • 理解基于 Hadoop 生态的大数据技术架构
  • c++学习之异常
  • 18.Java程序设计-基于Springboot的电影院售票系统的设计与实现
  • 论文阅读——Deformable ConvNets v2
  • 详细介绍开源固件-TF-A
  • 学习 Vue 3 源码
  • ES6与ES5的区别?
  • 文心一言API(高级版)使用
  • 【计算机网络】期末复习第一章
  • Metasploit渗透测试的漏洞利用和攻击方法
  • 五花八门客户问题(BUG) - 数据库索引损坏
  • docker镜像仓库hub.docker.com无法访问
  • 本地搭建Linux DataEase数据可视化分析工具并实现公网访问
  • 体坛联播|曼联热刺会师欧联杯决赛,多哈世乒赛首日赛程出炉
  • 欧派家居:一季度营收降4.8%,目前海外业务整体体量仍较小
  • 中国以“大幅开放市场”回应贸易保护主义
  • 超燃!走过莫斯科街头的“中国排面”
  • 金融监管总局:力争实现全国普惠型小微企业贷款增速不低于各项贷款增速
  • 赵乐际:深入学习贯彻习近平生态文明思想,推动森林法全面有效贯彻实施