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文件.并不能获取到第三方库的源码,这时我们需要静态链接库编译的技巧: 上图是实验前的文件分布. 使 ...
随机推荐
- [转载]标签a的href和onclick
转载自:http://gocom.primeton.com/blog21307_27051.htm 我以前在写<A>的href和onclick一直很随意,后来出过几次问题,以后才开始重视这 ...
- (Problem 92)Square digit chains
A number chain is created by continuously adding the square of the digits in a number to form a new ...
- HDU 5755 Gambler Bo(高斯消元)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5755 [题目大意] 一个n*m由0,1,2组成的矩阵,每次操作可以选取一个方格,使得它加上2之后对 ...
- 关于tableView的简单实例
关于tableCell选中颜色 //无色 cell.selectionStyle = UITableViewCellSelectionStyleNone; //蓝色 cell.selectionSty ...
- ubuntu安装XHProf
1. 安装XHProf wget http://pecl.php.net/get/xhprof-0.9.2.tgz tar zxf xhprof-0.9.2.tgz cd xhprof-0.9.2 s ...
- UVA - 1103Ancient Messages(dfs)
UVA - 1103Ancient Messages In order to understand early civilizations, archaeologists often study te ...
- UVA-514 Rails (栈)
Rails There is a famous railway station in PopPush City. Country there is incredibly hilly. The s ...
- 具体解释http 协议
HTTP协议的主要特点可概括例如以下: 1.支持客户/server模式. 2.简单高速:客户向server请求服务时,仅仅需传送请求方法和路径.请求方法经常使用的有GET.HEAD.POST.每种方法 ...
- https://github.com/coolnameismy/BabyBluetooth github上的一个ios 蓝牙4.0的库并带文档和教程
The easiest way to use Bluetooth (BLE )in ios,even bady can use. 简单易用的蓝牙库,基于CoreBluetooth的封装,并兼容ios和 ...
- cc2540 cc2541 低功耗实測和总结-与注意事项 - 低功耗小于10uA
CC2541 CC2540 实现超低功耗是很重要的: 我们来总结一下实现方法: 1,有定时器在跑时会一直跑在 PM2 电流在 300uA左右. 没有定时器跑后会到 PM3 , 电流会少于1 ...