libiconv-1.11.1-windows编译

Windows下安装libiconv库教程(转换字符编码库) Windows下安装libiconv库(转换字符编码库) 示例:VS2019安装(库版本: 1.9.2) 1. 下载库文件 访问libiconv库官网[ GNU libiconv库Windows下载地址 ] 找到 Download 标签 下载 Complete package, except sources (完整的软件包,源代码除外) ... 阅读详情
AI摘要

本文介绍了libiconv库在Windows下的编译方法。libiconv是广泛使用的字符编码转换库,支持多种编码。文中详细说明了从源代码下载、分析、修改,到编写CMake脚本,再到使用vs2008和vs2015进行编译、测试验证及安装库文件和头文件的全过程。

        本文操作按照《c&c++开源库编译指南》中内容规范编写,编译环境配置、工具下载、目录规划,及更多其他开源库编译方法请参考该文章。

        c&c++开源库编译指南:https://blog.youkuaiyun.com/binary0006/article/details/144086155

        本文章中的源代码已提交到gitee仓库,地址:https://gitee.com/binary0010/depends/tree/master/c/libiconv-1.11.1

1.libiconv 概述

        libiconv 是一个广泛使用的字符编码转换库,由 GNU 项目开发并维护,旨在解决不同字符编码之间的转换问题,确保软件在多语言环境下能正确处理文本数据。

        从技术实现上看,libiconv 支持多种常见的字符编码,如 ASCII、UTF - 8、GBK、ISO - 8859 等。它提供了一套简洁的 API 接口,包括 iconv_open 用于打开一个编码转换描述符,iconv 进行实际的编码转换操作,以及 iconv_close 关闭转换描述符。这些接口可以方便地集成到各种 C 或 C++ 程序中,也可通过包装器供其他编程语言调用。编译时,libiconv 具有良好的跨平台性,能在 Linux、Windows、macOS 等多种操作系统上进行编译,并且依赖较少,通常只需标准的 C 库支持。

        在应用场景方面,libiconv 具有广泛的用途。在 Web 开发中,当服务器接收来自不同客户端的多语言数据时,可使用 libiconv 将其转换为统一的编码格式进行处理和存储;在文本处理工具中,如编辑器、翻译软件等,libiconv 能帮助用户在不同编码的文本文件之间进行转换。在开源社区,libiconv 基于 GPL 许可发布,代码托管在 GNU 的官方仓库。社区活跃度高,持续对其进行维护和更新,修复潜在的漏洞,添加对新编码格式的支持,拥有大量的用户和开发者群体,被众多知名项目所采用。

2.libiconv编译

2.1.源代码下载

        libiconv源代码可以在gun的官方ftp上下载,源代码下载地址:https://ftp.gnu.org/pub/gnu/libiconv/,根据网上查到的资料显示支持vs编译最后一个版本为1.11.1版本,该版本的发布日期是2007-12-10,虽然看着有点老旧,实践测试功能是可以正常使用的,这里我们会使用vs2008来进行编译,选这个低版本也可以避免在vs2008中编译报错。

        也可以自己复制这个地址下载:https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.11.1.tar.gz 

2.2.windows编译

        先解压源代码到指定目录,libiconv-1.11.1版本中中没有提供CMakeLists.txt编译脚步,提供了makefile文件,在windows上可以使用nmake来构建和编译,但是实际操作已经通过网上查阅的资料,在编译过程中始终会出现问题。这里我们自己编译CMakeLists.txt脚本来构建。

2.2.1.源代码分析

2.2.1.1.makfile文件分析 

        在编译CMakeLists.txt脚本之前我们先分析一下源代码目录中的Makefile.msvc,他会编译libcharsets、lib、srclib、src、po、man、tests等多个子工程,还会拷贝vs特化的一些头文件iconv.h.msvc-static|iconv.h.msvc-shared、config.h.msvc。

        实际上以sdk方式做开发时,只需要libcharsets和lib子工程编译的库就可以了,后面根据Makefile.msvc文件的分析编写我们规范的CMakeLists.txt脚本文件,同时还会对源代码做部分修改。

2.2.1.2.源代码修改

        针对libiconv源代码修改,实际上是新增源代码下lib、libcharset工程中需要使用的头文件,共有四个,后面会给出每个文件的源代码:

libiconv-1.11.1/include/iconv.h

libiconv-1.11.1/lib/config.h

libiconv-1.11.1/libcharset/config.h

libiconv-1.11.1/libcharset/include/localcharset.h

libiconv-1.11.1/include/iconv.h代码:

/* Copyright (C) 1999-2003, 2005-2006 Free Software Foundation, Inc.
   This file is part of the GNU LIBICONV Library.

   The GNU LIBICONV Library is free software; you can redistribute it
   and/or modify it under the terms of the GNU Library General Public
   License as published by the Free Software Foundation; either version 2
   of the License, or (at your option) any later version.

   The GNU LIBICONV Library is distributed in the hope that it will be
   useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Library General Public License for more details.

   You should have received a copy of the GNU Library General Public
   License along with the GNU LIBICONV Library; see the file COPYING.LIB.
   If not, write to the Free Software Foundation, Inc., 51 Franklin Street,
   Fifth Floor, Boston, MA 02110-1301, USA.  */

/* When installed, this file is called "iconv.h". */

#ifndef _LIBICONV_H
#define _LIBICONV_H

#define _LIBICONV_VERSION 0x010B    /* version number: (major<<8) + minor */

#if defined(__GNUC__) && !defined(__MINGW32__)
#  if HAVE_VISIBILITY && BUILDING_LIBICONV
#     define LIBICONV_DLL_EXPORTED __attribute__((__visibility__("default")))
#  else
#     define LIBICONV_DLL_EXPORTED
#  endif
#elif defined(__MINGW32__)

#elif defined(_MSC_VER)
#  include <Windows.h>
#  ifdef ICONV_DLL
#     ifdef BUILDING_LIBICONV
#        define LIBICONV_DLL_EXPORTED __declspec(dllexport)
#     else
#        define LIBICONV_DLL_EXPORTED __declspec(dllimport)
#     endif // ICONV_DLL
#  else
#  define LIBICONV_DLL_EXPORTED
#  endif
#endif

extern LIBICONV_DLL_EXPORTED int _libiconv_version; /* Likewise */

/* We would like to #include any system header file which could define
   iconv_t, 1. in order to eliminate the risk that the user gets compilation
   errors because some other system header file includes /usr/include/iconv.h
   which defines iconv_t or declares iconv after this file, 2. when compiling
   for LIBICONV_PLUG, we need the proper iconv_t type in order to produce
   binary compatible code.
   But gcc's #include_next is not portable. Thus, once libiconv's iconv.h
   has been installed in /usr/local/include, there is no way any more to
   include the original /usr/include/iconv.h. We simply have to get away
   without it.
   Ad 1. The risk that a system header file does
   #include "iconv.h"  or  #include_next "iconv.h"
   is small. They all do #include <iconv.h>.
   Ad 2. The iconv_t type is a pointer type in all cases I have seen. (It
   has to be a scalar type because (iconv_t)(-1) is a possible return value
   from iconv_open().) */

/* Define iconv_t ourselves. */
#undef iconv_t
#define iconv_t libiconv_t
typedef void* iconv_t;

/* Get size_t declaration.
   Get wchar_t declaration if it exists. */
#include <stddef.h>

/* Get errno declaration a
Windows平台下libiconv-1.11.1的CMake跨版本编译实战 本文详细介绍了在Windows平台下使用CMake跨版本编译libiconv-1.11.1的实战步骤。通过自定义CMake脚本,解决不同Visual Studio版本间的兼容性问题,生成支持VS2008到VS2015的多版本库文件。文章包含环境配置、源代码修改、CMake脚本编写及实际应用建议,帮助开发者高效集成libiconv到项目中。 阅读详情

相关推荐

Windows下用CMake搞定libiconv-1.11.1编译:VS2008/2015双版本实战指南

本文详细介绍了在Windows平台下,使用CMake工具编译libiconv-1.11.1库的完整实战指南。针对Visual Studio 2008和2015双版本环境,提供了从源码分析、CMake脚本编写、运行时库兼容性处理到编译验证的全流程解决方案,帮助开发者高效构建字符编码转换库。

weixin_28839699的博客 223

Windows下用CMake搞定libiconv-1.11.1编译:VS2008/2015双版本实战

本文详细解析了在Windows平台下使用CMake编译libiconv-1.11.1库的完整实战方案。针对官方源码缺乏现代构建支持的问题,提供了适配VS2008和VS2015双版本的CMake脚本,解决了头文件缺失、运行时库兼容性等核心编译难题,并实现了静态库与动态库的多种变体生成。

ol789012的博客 452

别再到处找libiconv静态库了!用VS2022从源码编译libiconv-1.17的保姆级教程

本文提供了一份详细的VS2022编译libiconv-1.17静态库的保姆级教程,帮助开发者解决Windows平台下预编译版本稀缺和兼容性问题。从环境准备、源码获取到工程配置和编译优化,逐步指导如何构建完全可控的libiconv静态库,并分享高级应用技巧和性能优化方案。

weixin_30645617的博客 574

Windows下从源码编译libiconv的完整指南

字符编码转换是跨平台开发中绕不开的基础问题,从UTF-8到GBK、BIG5等编码的互操作直接影响文本处理与数据交换效率。iconv作为GNU提供的通用编码转换库,凭借庞大的编码映射表和简洁API,长期是Unix/Linux生态下的标准选择,但其基于autotools的构建体系在Windows环境下却常常让开发者头疼。借助MSYS2与MinGW-w64工具链,可以还原接近Linux的原生编译体验,通过configure参数定制静态库或动态库,实现编码库的本地化构建。无论是为日志分析工具适配字符集,还是为C/C

weixin_42522669的博客 163

别再到处找libiconv静态库了!手把手教你用VS2022编译最新版libiconv-1.17(附完整源码配置流程)

本文详细介绍了如何在VS2022环境下编译最新版libiconv-1.17静态库,解决Windows平台字符编码转换问题。从源码获取、项目配置到关键文件修改,提供完整的避坑指南和验证方法,帮助开发者高效构建libiconv静态库,提升跨平台开发效率。

weixin_30617737的博客 526

windows下编译libiconv-1.15

windows下编译libiconv-1.15 '

libiconv1.15 window visualstudio2022版sln

liiconv1.15 window visualstudio2022版sln

从315MHz到125kHz:手把手教你用Arduino模拟汽车钥匙的RKE/PKE信号(附代码)

本文详细介绍了如何使用Arduino开发板和射频模块模拟汽车钥匙的RKE/PKE信号,包括硬件准备、代码实现和安全机制。通过实践教程,读者可以深入理解315MHz和125kHz信号在汽车电子领域的应用,掌握无钥匙进入系统的核心技术。

weixin_30945039的博客 223

HWSD全球土壤数据下载处理

下载地址: http://www.fao.org/soils-portal/soil-survey/soil-maps-and-databases/harmonized-world-soil-database-v12/en/

江北20190411的博客 3万+

【项目实战-MATLAB】:基于机器学习的虹膜识别系统设计

虹膜识别主要包括虹膜定位、虹膜裁剪、极坐标变换、归一化、HOG特征提取、虹膜识别六个主要步骤。本系统采用MATLAB作为开发工具实现 主要算法:霍夫变换预处理 HOG特征提取 SVM进行识别

qq_45047246的博客 6537

NCBI Datasets CLI优化:解决基因组数据下载报错与速度问题

基因组数据下载是生物信息学分析的关键环节,其稳定性和效率直接影响研究进度。NCBI Datasets CLI作为官方命令行工具,常面临连接中断和下载速度慢两大痛点,这主要源于服务器连接限制和网络传输问题。通过自动重试机制和校验修复流程可提升稳定性,而连接复用与CDN加速等技术能显著提高下载效率。在植物基因组等大规模数据场景中,结合脱水模式和增量更新策略可减少70%传输量。本文以艾草基因组项目为例,展示如何通过并行下载和API优化将100个基因组的下载时间从18小时缩短至2小时,为生物信息学研究提供可靠的数据

weixin_29051245的博客 242

逆向实战:360加固DEX解密全流程解析(附Frida脚本与SoFixer修复技巧)

本文深入解析360加固DEX解密的全流程,涵盖动态Hook技术、Frida脚本应用及SoFixer修复技巧。通过实战案例详细展示如何识别加固特征、定位关键函数、实现ELF文件修复,并解析RC4和zlib解密算法,为逆向工程师提供全面的技术指导。

weixin_29323551的博客 608

opencv去除印章痕迹

今天看到一个很有意思的程序,就是去除票据上的红色印章,觉得很有意思,就把它抄过来记录一下,同时自己也开了一下脑洞。 原来的程序来自:https://www.cnblogs.com/skyfsm/p/7638301.html 可以看到图像效果很不错,下面是源码实现: #include &lt;iostream&gt; #include &lt;opencv2/imgproc/imgpro...

zeng_haoyu的博客 7955

SAM3 几行代码支持任意图像分辨率,减少显存占用(针对transformers库)

几行代码让sam3支持任意图像分辨率

qq_41234663的博客 156

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

上一篇: freetype-2.13.3-windows编译
下一篇: 彻底解决VS2008编译错误:fatal error C1083 无法打开包括文件“stdint.h“
binary0010
博客等级 码龄3年 327粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

binary0010

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值