Windows下使用VS2019编译libiconv-1.16

参考了 https://blog.csdn.net/zhouguangcai8/article/details/105270657,在其上做了精减与额外说明

获取libiconv-1.16源代码并配置项目

  1. 下载libiconv-1.16源代码并解压到目录libiconv-1.16
    链接地址:https://ftp.gnu.org/pub/gnu/libiconv
  2. 使用VS2019创建空项目

准备编译

1.准备编译源文件

  1. libiconv-1.16\lib目录下的 relocatable.hrelocatable.ciconv.c 三个文件复制到项目目录下
  2. libiconv-1.16\libcharset\lib\localcharset.c 复制到项目目录下
  3. libiconv-1.16\libcharset\include\localcharset.h.build.in复制到项目目录下,并重命名为localcharset.h
  4. 在工程目录下创建include目录,
  5. libiconv-1.16\include\iconv.h.build.in复制到include目录,并重命名为iconv.h
  6. libiconv-1.16\config.h.in拷贝到include目录下,并重命名为 config.h
  7. libiconv-1.16\lib目录下所有的 .h 和 .def文件拷贝到include目录下

2.配置项目

  1. 配置项目为静态库(根据自己需求选择静态库或者动态库
  2. 把刚刚创建的include目录路径添加附加包含目录
  3. 添加两个预处理定义
    USING_STATIC_LIBICONV(使用静态库才添加,不使用就不要添加)
    _CRT_SECURE_NO_WARNINGS (防止使代码中的sprintf等函数报错)

3.修改报错的源代码

  1. localcharset.h 第21-27行原本为:
#if @HAVE_VISIBILITY@ && BUILDING_LIBCHARSET
#define LIBCHARSET_DLL_EXPORTED __attribute__((__visibility__("default")))
#elif defined _MSC_VER && BUILDING_LIBCHARSET
#define LIBCHARSET_DLL_EXPORTED __declspec(dllexport)
#else
#define LIBCHARSET_DLL_EXPORTED
#endif

修改为:

#ifdef LIBICONV_EXPORTS
#define LIBCHARSET_DLL_EXPORTED __declspec(dllexport)
#elif USING_STATIC_LIBICONV
#define LIBCHARSET_DLL_EXPORTED
#else
#define LIBCHARSET_DLL_EXPORTED __declspec(dllimport)
#endif
  1. iconv.h 第25-32行原本为:
#if @HAVE_VISIBILITY@ && BUILDING_LIBICONV
#define LIBICONV_DLL_EXPORTED __attribute__((__visibility__("default")))
#elif defined _MSC_VER && BUILDING_LIBICONV
#define LIBICONV_DLL_EXPORTED __declspec(dllexport)
#else
#define LIBICONV_DLL_EXPORTED
#endif
extern LIBICONV_DLL_EXPORTED @DLL_VARIABLE@ int _libiconv_version; /* Likewise */

修改为:

#ifdef LIBICONV_EXPORTS
#define LIBICONV_DLL_EXPORTED __declspec(dllexport)
#elif USING_STATIC_LIBICONV
#define LIBICONV_DLL_EXPORTED
#else
#define LIBICONV_DLL_EXPORTED __declspec(dllimport)
#endifextern LIBICONV_DLL_EXPORTED int _libiconv_version; /* Likewise */

第91行原本为:

extern LIBICONV_DLL_EXPORTED size_t iconv (iconv_t cd, @ICONV_CONST@ char* * inbuf, size_t *inbytesleft, char* * outbuf, size_t *outbytesleft);

修改为

extern LIBICONV_DLL_EXPORTED size_t iconv (iconv_t cd, const char** inbuf, size_t* inbytesleft, char** outbuf, size_t* outbytesleft);

去掉第109、110、130、177行多余的@符号

@USE_MBSTATE_T@ 改为 USE_MBSTATE_T
@BROKEN_WCHAR_H@ 改为 BROKEN_WCHAR_H
@HAVE_WCHAR_T@ 改为 HAVE_WCHAR_T
  1. iconv.c 250行
ICONV_CONST 改为 const // 还有一处ICONV_CONST需要改,忘了在哪里了
  1. config.h 第30行注释掉
//#undef EILSEQ

编译

切换VS项目的配置Release/Debug x86/x64,生成自己所需的库。

Windows下使用VS2019编译libiconv-1.16相关推荐

  1. 在Windows下使用vs2019编译libjpeg库

    一.库的编译 1.下载 libjpeg 源码,这里我下载的是 jpegsr9e.zip 2.解压源码 3.进入解压后的目录,找到 makefile.vs 文件,用文本编辑器打开并编辑,找到 语句 #! ...

  2. windows下用vs2019编译fltk 1.3.5

    1.下载源码.下载地址https://www.fltk.org/software.php 2.解压下载的压缩包. 3.启动visual studio,打开 -/fltk-1.3.xxxx/ide/Vi ...

  3. 手把手教你在windows下源码编译Open3D

    文章目录 前言 1.编译环境 2.编译步骤 3.编译中的bug 3.1 下载超时问题,ispc.pybind11.open3d_sphinx_theme等 3.2 boringssl 3.3 Dire ...

  4. mysql 源码 sln_在windows下使用vs2013编译和调试mysql源代码

    在windows下使用vs2013编译和调试mysql源代码 1. 准备工作 1)OS:win10 + VS2013 2)mysql 源码(windows版):mysql-5.6.25.zip 3)p ...

  5. 【C#】C#中使用GDAL3(一):Windows下超详细编译C#版GDAL3.3.0(VS2015+.NET 4+32位/64位)

    转载请注明原文地址:https://www.cnblogs.com/litou/p/15004877.html 总目录 (一)Windows下超详细编译C#版GDAL3.3.0(VS2015+.NET ...

  6. 在windows下写makefile编译代码

    From: http://blog.163.com/xjming487@126/blog/static/212951352007625114849843/ 在windows下写makefile编译代码 ...

  7. 实践详细篇-Windows下使用VS2015编译的Caffe训练mnist数据集

    上一篇记录的是学习caffe前的环境准备以及如何创建好自己需要的caffe版本.这一篇记录的是如何使用编译好的caffe做训练mnist数据集,步骤编号延用上一篇 <实践详细篇-Windows下 ...

  8. [转]cscope在windows下使用mingw编译的方法

    cscope在windows下使用mingw编译的方法      http://blog.csdn.net/mslk/archive/2007/05/06/1598513.aspx cscope在wi ...

  9. Windows下用CMake编译JsonCpp及配置(适合新手)

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 JsonCpp是什么? JSON是一种轻量级的数据交换格式.它可以表示数字.字符串.有序的值序列 ...

最新文章

  1. 熊猫直播Rancho发布系统构建之路
  2. 【OCR技术系列之二】文字定位于切割
  3. PowerDesigner教程系列(三)概念数据模型
  4. 基于 Spring Boot 和 Spring Cloud 实现微服务架构
  5. ABAP动态取得数据的方法
  6. Graphpad Prism计算IC50
  7. python 知识点总结
  8. 超低内阻mos管_FHU100N03低压MOS管保障榨汁机电路正常运行!
  9. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第25篇]使用特殊的素数定义GF(p)和GF(2^n)的方法
  10. linux-获取帮助-ls命令-date命令-man命令
  11. JAVA中集合输出的四种方式
  12. 机器学习-吴恩达-笔记-3-正则化
  13. 2008-2011大股东增持专题
  14. thinkphp 下载txt文档
  15. talib如何安装方法
  16. 万能平板刷机软件_一加万能工具包(手机万能刷机工具)
  17. 如何用Java写QQ机器人 v2.0
  18. 华为nova5iotg功能使用_华为nova5有OTG功能吗?可以连接U盘和鼠标吗[多图]
  19. 第一章概述-------第一节--1.1计算机网络在信息时代中的作用
  20. 如何学会做一名优秀的下属

热门文章

  1. 上链第四条路 迅雷、百度、阿里接连打造区块链普惠基础设施
  2. GTHE3开发记录1
  3. 2005-2022中国企业对外直接投资、OFDI海外投资明细、中国全球投资追踪数据CGIT(含非建筑施工类问题投资)
  4. 喜欢java更喜欢旅游.....
  5. 腾讯 android安全,腾讯安全玄武实验室:市面主流安卓应用存在用户数据“被克隆”风险...
  6. Java配置Path和JAVA_HOME(windows)
  7. 高教社杯2007年A题--Leslie算法,matlab实现
  8. 我的开源夏令营--刚刚过去的两个月
  9. 问题--在matplotlib的散点图中如何给不同种类颜色的点加标签?
  10. 信息安全-网络设备安全(一)