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

在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


http://www.kler.cn/news/160456.html

相关文章:

  • 对GPU进行基准测试可以帮助你评估其功能,识别潜在问题,防患于未然
  • 学习极市开发平台
  • 【daily notes on IT/AI/science】
  • Linux--环境变量
  • [实践总结] 使用Apache HttpClient 4.x进行进行一次Http请求
  • [ffmpeg] av_opt_set 解析
  • MongoDB知识总结
  • 【二分答案法】寻找峰值
  • ALPHA开发板烧录工具MfgTool烧写方法
  • Linux系统调试课:网络性能工具总结
  • HCIP考试实验
  • RDMA编程实例rdma_cm API
  • 多传感器融合SLAM在自动驾驶方向的初步探索的记录
  • Gitlab 安装手册
  • 七天.NET 8操作SQLite入门到实战 - 第六天后端班级管理相关接口完善和Swagger自定义配置
  • Python:核心知识点整理大全4-笔记
  • C++ IO库
  • Baumer工业相机堡盟工业相机如何通过BGAPISDK将相机图像高速保存到电脑内存(C#)
  • 团建策划信息展示服务预约小程序效果如何
  • 短视频购物系统源码:构建创新购物体验的技术深度解析
  • 【前端设计模式】之观察者模式
  • vue3+ts自定义插件
  • 智能优化算法应用:基于白冠鸡算法无线传感器网络(WSN)覆盖优化 - 附代码
  • Redis key过期删除机制实现分析
  • Docker中安装Oracle10g和oracle增删改查
  • java 操作git
  • Excel 动态拼接表头实现导出
  • easyui实现省市县三级联动
  • 一张图理解接口测试框架
  • 汽车网络安全--ISO\SAE 21434解析(一)