VS2008编译iconv静态链接库
iconv是将一种编码格式转换为还有一种编码格式的开源库,比如能够把Windows环境下通用的ASCii(中文是GB2312)编码转换为国际通用的Unicode编码
iconv最新版本号仅仅支持MingW和Cygwin编译
1. 下载 iconv 库并解压,眼下最新版本号为 1.14
http://ftp.gnu.org/pub/gnu/libiconv/
2、新建一个VC空project(libIconv)
(1)libIconvproject下新建一个目录Iconv
(2)将下载的库中lib目录下的全部文件复制到这个目录下
(3)将烤入到Iconv目录下的config.h.in重命名为config.h
(3)将库中libcharset/lib/localcharset.c文件复制到这个目录下
(4)将库中include目录下iconv.h.in文件重命名为iconv.h放在Iconv目录下
(5)将库中scrLib/localcharset.h文件拷到Iconv目录下
3、project中加入现有项,将 iconv.c ,localcharset.c 加入到project中.
4、project属性->C/C++ –>附加包括文件夹:../Iconv;
5、project属性:常规->配置类型->静态库(.lib)
6、改动文件里的BUG:
(1) iconv.h :
1).删除掉全部的 @ 符号 (14处)
2).改动25行: extern DLL_VARIABLE int _libiconv_version;
为 extern /*DLL_VARIABLE*/ int _libiconv_version;
3).改动83行: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);
(2)localcharset.c:
凝视掉76行: # include "configmake.h"
7、右击解决方式。选择生成解决方式。
得libIconv.lib静态链接库。头文件是iconv.h(Iconv目录下)
使用:
#include <iostream>
#include <string>
using namespace std;
#include "iconv.h"
#pragma comment(lib,"iconv.lib")
int code_convert(char *from_charset,char *to_charset,const char *inbuf, size_t inlen,char *outbuf, size_t outlen)
{
iconv_t cd;
const char **pin = &inbuf;
char **pout = &outbuf;
cd = iconv_open(to_charset,from_charset);
if (cd==0) return -1;
memset(outbuf,0,outlen);
if (iconv(cd, pin, &inlen,pout, &outlen)==-1) return -1;
iconv_close(cd);
return 0;
}
* UTF-8 to GBK */
int u2g(const char *inbuf, size_t inlen, char *outbuf, size_t outlen)
{
return code_convert("UTF-8","GBK",inbuf,inlen,outbuf,outlen);
}
* GBK to UTF-8 */
int g2u(const char *inbuf, size_t inlen, char *outbuf, size_t outlen)
{
return code_convert("GBK", "UTF-8", inbuf, inlen, outbuf, outlen);
}
void readFile(const char* pchFileName,string &strFileContent)
{
char* buffer = NULL;
int nLen = 0;
FILE *fp = fopen(pchFileName,"rb");
if (fp == NULL)
{
cout << pchFileName << " open failed!" << endl;
exit(1);
}
fseek(fp,0L,SEEK_END); //文件指针移到文件尾
long fsize = ftell(fp); //得到当前指针位置,既文件的长度
rewind(fp); //文件指针恢复到文件头位置
//动态申请空间,为保存字符串结尾标志'\0'。多申请一个字符的空间。
buffer = (char*)malloc(sizeof(char)*fsize+1);
if (buffer == NULL)
{
cout << "memory error!" << endl;
fclose(fp); //不再使用文件,关闭
exit(1);
}
nLen=fread(buffer,sizeof(char),fsize,fp);
buffer[nLen] = '\0';//加入字符串结尾标志
string strBuffer(buffer);
strFileContent = strBuffer;
free(buffer);
buffer = NULL;//释放后也要把指针设成NULL。避免野指针。
fclose(fp);
}
int main()
{
string strFileContent;
readFile("3.txt",strFileContent);
cout << strFileContent << endl;
size_t iInBytes,oOutBytes;
iInBytes = strFileContent.length();
oOutBytes = 3*iInBytes+1;
char *pchDestStr = new char[oOutBytes];
memset(pchDestStr,0,oOutBytes);
g2u(strFileContent.c_str(),iInBytes,pchDestStr,oOutBytes);
cout << pchDestStr << endl;
system("pause");
return 0;
}
VS2008编译iconv静态链接库的更多相关文章
- VS2010编译Boost 1.57 静态链接库
http://www.cnblogs.com/cuish/p/4175491.html 0.前提 Boost库版本 1.57.0 下载地址 http://www.boost.org/users/his ...
- App开发流程之数据持久化和编译静态链接库
先记录数据持久化. iOS客户端提供的常用数据持久化方案:NSUserDefaults代表的用户设置,NSKeydArchiver代表的归档,plist文件存储,SQLite数据库(包括上层使用的Co ...
- GCC 编译使用动态链接库和静态链接库
1 库的分类 根据链接时期的不同,库又有静态库和动态库之分. 静态库是在链接阶段被链接的(好像是废话,但事实就是这样),所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行. 有 ...
- GCC 编译使用动态链接库和静态链接库的方法
1 库的分类 依据链接时期的不同,库又有静态库和动态库之分. 静态库是在链接阶段被链接的.所以生成的可执行文件就不受库的影响了.即使库被删除了,程序依旧能够成功执行. 有别于静态库,动态库的链接是在程 ...
- 【转】gcc 编译使用动态链接库和静态链接库
1 库的分类 根据链接时期的不同,库又有静态库和动态库之分. 静态库是在链接阶段被链接的(好像是废话,但事实就是这样),所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行. 有 ...
- GCC编译过程与动态链接库和静态链接库
1. 库的介绍 库是写好的现有的,成熟的,可以复用的代码.现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常. 本质上来说库是一种可执行代码的二进制形式,可 ...
- [转载]GCC 编译使用动态链接库和静态链接库--及先后顺序----及环境变量设置总结
来自http://blog.csdn.net/benpaobagzb/article/details/51364005 GCC 编译使用动态链接库和静态链接库 1 库的分类 根据链接时期的不同,库又有 ...
- go 工具链目前[不支持编译 windows 下的动态链接库][1],不过[支持静态链接库][2]
go 工具链目前[不支持编译 windows 下的动态链接库][1],不过[支持静态链接库][2].想要产生dll,可以这样 workaround ,参考 golang [issuse#11058][ ...
- GO 使用静态链接库编译 生成可执行文件 使用第三方 .a 文件,无源码构造
go build 和 go install 都需要使用源码来进行编译.但是有时候我们只有.a或者.so文件.并不能获取到第三方库的源码,这时我们需要静态链接库编译的技巧: 上图是实验前的文件分布. 使 ...
随机推荐
- Django Web开发【3】创建网络收藏夹
这一节我们将继续一个创建网络收藏夹应用,并学习视图.模型以及模板的处理过程. Django是一个MVC开发框架,但是它的控制器对应的为view,而视图对应为模板(template),模型对应model ...
- 算法面试题 之 最长递增子序列 LIS
找出最长递增序列 O(NlogN)(不一定连续!) 参考 http://www.felix021.com/blog/read.php?1587%E5%8F%AF%E6%98%AF%E8%BF%9E%E ...
- python基础学习笔记5--对象
对象(object) 1.对象(object): 面向对象程序设计重要术语. 对象的特性:多态性.封装性.继承性 >>def add(x,y): return x+y 对于很多类型的参数都 ...
- 转: javascript模块加载框架seajs详解
javascript模块加载框架seajs详解 SeaJS是一个遵循commonJS规范的javascript模块加载框架,可以实现javascript的模块化开发和模块化加载(模块可按需加载或全部加 ...
- Snort
https://www.snort.org/ http://blog.csdn.net/htttw/article/details/7521053 http://www.ibm.com/develop ...
- IQC,QA,FQC,OQC,IPQC的定义与职责
进货检验员(IQC):CLInetLabIQC(以下简称IQC)是CLInet在多年开发维护EQA(实验室间质量评价)系统后,成功开发的一套完善的实验室内部的质量评价.质量控制的软件.它不仅包含了每家 ...
- oracle在一个字符串中查找某个字符出现过几次
SELECT LENGTH(REGEXP_REPLACE(REPLACE('123,45,6,5', ',', '@'), '[^@]+', '')) COUNT FROM DUAL; 返回结果为 ...
- 升级automake和autoconf
<pre name="code" class="html">zjtest7-redis:/root/soft/json-c-json-c-0.12- ...
- CSS 布局总结——固定宽度布局
固定宽度布局 单列布局 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2Fyd29sZjI0/font/5a6L5L2T/fontsize/400/fil ...
- 联想S720/S720i通刷刷机包 Vibe V1.0
ROM介绍 基于官方最新S116底包制作,保证足够的稳定性. 增加VIBE元素,看起来更加大气.美观. 首次增加VIBE元素,720i执行起来无压力,720可能会有点卡.自行酌情刷入. 有bug请文明 ...