日历
网志分类
展开全部
· ***    All     ***
· ***    Mood    ***
· ***    Life    ***
· *** Technology ***
· ***     Yc     ***
· ***  Cartoon   ***
· *** Collection ***
· ***  Unsorted  ***
媒体播放器

Get the Flash Player to see this player.
SkyDrive is currently not available.

站内搜索
友情链接
· 我的歪酷 非非共享界
· 风雨妖虹
· kingbeful@csdn
· 手心的太阳@瞬间十年
· Moment@Travis
· 江南麒麟居
· εз毛线团εз
· 乌拉的neverland
· 碾过的日子 闲也陶陶
· 狡兔三窟 *^.^*
· 橄榄林的风
· 水色の街
· Powerful and delicate, Life struggling
· 阿德咖吧
· 陷阱
· 风之华
· vkobe的Neverland@@
· 白日梦已死 · 伤越夜海
· 望天
· 空の軌跡
· 没什么好东西的空间
· 心情...咖啡屋
· 随风独自凉
· Some where i belong
· .★·°双晨·故事°☆ .
· BigWorld的记事本
· *Sara's*
· 人生若只如初见
· 宠辱不惊闲看庭前花开花落·去留无意漫随天外云卷云舒
· 我思我不在
· 飞扬飘雨
· lazy的猫猫
常用链接
· [Google]
· [Google Accounts]
· [IT Items]
· [Telnet@Yanxi]
· [Wikipedia]
· [Linux Manpages]
· [Mofile.com]
· [163888.net]
· [fm.qq.com]
· [Proxy]
· [Animepaper.net]
· [FreeproxySite]
· [gonwan@fc2]
· [skydrive.live.com]
· [gonwan@lifelogger]

订阅 RSS

0109286

歪酷博客

逆さまの蝶
In this Craziness
Uncertainy
一人一人の想いを
僕らは何処かに遺せるだろうか

In this Craziness
You gave me life
一つの想いを
僕らは何処まで守れるだろうか



« 上一篇: Potential Errors Passing CRT Objects Across DLL Boundaries 下一篇: 咳咳.. »
丸子·酱 @ 2008-07-19 23:57

    摆弄了一下午libxml2这个library, 现在就来说说.

1. 安装:
    还是建议使用这里的binary, 应该比较稳定的, 不要追求最新版本而自己编译. self-build是一个很痛苦的过程, 效果也不一定就好.  尤其libxml2依赖libiconv, zlib这两个library. zlib还相对容易, 而libiconv在win32下的vs的support居然被drop掉了, 似乎只能用mingw编译了, 问题就是, mingw和vc2005的binary兼容性怎么样呢? 似乎有很多要注意的地方:
* Keep the interfaces pure C
* do explicit dynamic linking
* have your entry points and calling convention well behaved (ie. extern C, _cdecl, etc)
* don't do weird things in DllMain
* are careful about passing around pointers to heap memory managed by different runtimes
* look at padding and structure packing if you pass around pointers to structs (you don't seem to do that, though)
* are very careful about compatible code generation and register usage (stack frame pointers, EBP/ESP usage, register state preservation, etc)

2. 编译:
    假设你已经在vs2005中设好了相应include, lib的路径, 于是你就可以编译了. libxml2提供了3个.lib文件, 你到底要用哪一个呢:
*) libxml2.lib: 显然用了这个就要依赖libxml2.dll啦.
*) libxml2_a.dll: a, archieve, 什么都不依赖. 可是必须要link到msvcrt.lib. 因为libxml2也是link到msvcrt.lib的. debug版本编译的时候会出现很诡异的问题. 就是同时连接到了debug和release版本的msvcrt(d).lib, 为什么呢? 自己想- -...解决方法就是加一个编译器选项: /nodefaultlib:msvcrt.lib. release版本不需要.
*) libxml2_a_dll.lib: 诶..这个是什么东西, a了还dll? 请看这里这里. 意思就是说libxml2在win32下, 线程的使用在dll中有点小issue, 于是独立出一个lib, 其余的跟第二个lib一样.
    好了, 都说完了, 我的额外的library是这么设的: ws2_32.lib zlib.lib iconv_a.lib libxml2_a.lib

3. 编码:
    诶.. 好像顺序反了.
    其实coding并没有什么好说的, 看文档吧, 即使那个文档写的让人看了及其的难受强烈建议用doxygen自己生成一个慢慢看还能来回点啊哈哈哈好长一句话.
    有一点比较重要的就是libxml2内部处理使用的都是utf-8编码, 也就是说input, output虽然都是xmlChar*(其实就是unsigned char*), 但其实是utf-8编码的unsigned char*. 还记得字符集编码的概念么? 不记得点这里- -... 如果传入的参数不是utf-8编码, 可是会报错的哟, 而且编译好的binary无法disable error输出.....
    还有一点就是: libxml2不支持gbk编码! 什么? 对你没看错. 那怎么办? n种方法:
*) 直接掉libiconv的函数转... 好像很赖皮.
*) 改libxml2源码, 自己加上去, 好像有人这么做的, 点这里. 有点麻烦额.
*) 有一个xmlNewCharEncodingHandler()的函数, 疑似可以加gbk以及其它编码支持, 可以看看@@...
    然后coding吧, 一个简单的console程序有点小大, 1.1M左右, 呵呵, 只需要msvcrt(??).dll的link.
    还有就是这篇文章值得一看: http://www.blogjava.net/wxb_nudt/archive/2007/11/18/161340.html


曾经的这一天...



评论 / 个人网页 / 扔小纸条
* 昵称

已经注册过? 请登录

新用户请先注册 以便能显示头像及追踪评论回复

Email
网址
* 评论
表情
 


 

分类小组论坛
杂谈 , 娱乐、八卦 , 文学、艺术 , 体育 , 旅游、同城 , 象牙塔 , 情感 , 时尚、生活 , 星座 , 科技

请注意遵守中华人民共和国法律法规, 如威胁到本站生存, 将依法向有关部门报告, 同时本站的相关记录可能成为对您不利的证据.

相关法律法规
全国人大常委会关于维护互联网安全的决定
中华人民共和国计算机信息系统安全保护条例
中华人民共和国计算机信息网络国际联网管理暂行规定
计算机信息网络国际联网安全保护管理办法
计算机信息系统国际联网保密管理规定