2010-12-28
2010-08-11
2010-08-10
2010-07-31
还在为减肥苦恼?
秘诀就是天天两个40分钟的自行车骑行上下班
可选项 如果你想减的更快 就不要吃晚饭 有种理论是过午不食 因为15点后 人的消化能力减弱 实物会留在胃里一晚上 吸收毒素 肠胃得不到休息 不过我的实践表明 这样下来可能会有点贫血(蹲下起立会眼前发黑) 不过也可能是我的睡眠没有天天保证8小时 睡眠补血
减肥必须每天30分钟以上的有氧运动
通俗的说就是 像大雁迁徙一样的 长时间 持续运动 哪怕是持续走路30分钟以上也非常好 我估计应该比骑自行车还要好(因为自行车下坡时 就歇着了 这样运动就不持续了)
2010-07-23
主题:手机开发平台指南、教程和资料介绍(修改稿)
近来无事,把手机开发平台的学习指南、教程和资料总结一下,方便大家参考。
手机客户端软件开发最大的困难就是平台不统一,手机开发平台太多。
手机可分为智能手机开发和feather phone手机。开发平台可分为开放式平台和封闭式平台,开放式平台包括symbian、windows mobile、linux、iPhone、Android、BlackBerry、j2me、brew等,支持手机应用程序通过OTA下载和安装;封闭式 平台包括MTK、展讯、TI、飞利浦等。下面分别介绍。
1. Symbian:
Symbian平台为目前智能手机市场的老大,智能手机全球市场占70%以上,在欧洲和亚洲占绝对优势,只是在美国市场份额少得可怜,希望今年 nokia在美国发力,赶上其它智能手机。根据UI风格的不同,Symbian分为s60和UIQ两个平台,其中nokia使用s60平台,索爱和 moto采用UIQ平台。Symbian平台由于发展时间较长,又是市场老大,目前中文资料也较多,不像几年前刚接触时只有英文资料。以下书籍值得推荐:
《SYMBIAN OS软件开发开发--应用C++开发智能手机应用程序入门》(其中UI部分为UIQ平台),
《Series 60 应用程序开发》(以s60平台为主,重点推荐)
《Symbian OS C++手机应用开发 (第2卷)》
另外今年将出来一本有关uiq3.0的新书,值得期待。
关于symbian的开发网站和论坛:
诺基亚论坛:最好的symbian论坛,
http://discussion.forum.nokia.com/forum/forumdisplay.php?f=6,其中还有中文论坛。
UIQ官方论坛:http://developer.uiq.com/
Symbian公司中文论坛:http://developer.symbian.com/forum/forum.jspa?forumID=37
NewLC网站:http://www.newlc.com/
索爱uiq官方论坛:http://developer.sonyericsson.com/category.jspa?categoryID=3
索爱uiq中文论坛http://developer.sonyericsson.com/forum.jspa?forumID=133
2.windows mobile:
智能手机全球市场中windows mobile占12%左右市场份额。开发与windows平台类似,所以熟悉windows开发的能很快上手。目前没有较好的针对windows mobile的书,经典书籍《Windows 程序设计(第5版)》对于开发win32程序依然是最好的,经典的书就是牛啊!虽然pocket pc支持MFC,但smartphone不支持,所以为了更好的移植,用win32开发较好。由本书做基础,再参考windows mobile的sdk以及示例代码,应该能很快上手。
关于windows mobile的开发网站和论坛:
Windows mobile中文社区:http://www.winbile.net/BBS/
Pocket pc forum:http://www.windowsmobiledn.com/forum/
微软官方网站:http://www.microsoft.com/windowsmobile/developers/default.mspx
3. linux:
智能手机全球市场中linux手机仅占可怜的4.4%市场份额。原来moto还出过不少linux手机,如A768、A1200、E680、 E2、E6、V8等,07年8月份还信誓旦旦预测60%手机采用Linux OS,但moto后来回购了UIQ的股份,又与微软合作,还加入了google的开放手机联盟,看来要抛弃自己的linux平台了。另外,moto的策略 是linux+j2me的模式,虽然采用linux os,但并不对外开放linux的sdk,只有和moto合作的厂家才能获得native linux sdk,所以导致目前linux手机开发的资料和论坛较少。虽然有民间linux高手破解了moto的linux的sdk,可以开发native linux的程序,但native linux的程序不能直接安装在moto的linux手机上,还必须安装一个插件,这对普通用户又是难以跨越的一个门槛。所以个人觉得native linux手机的开发将走向末路。大部分linux手机的ui开发都是基于QT,关于QT开发,可参考《C++ GUI Qt3编程》、《精通Qt4编程》,如果有moto官方的sdk,参考API文档以及一些示例代码,将可以较快上手,如果没有官方的sdk,那就要话很长 时间hack了。目前没有很好的关于linux手机开发的论坛,个人推荐陈罡的博客http://www.cublog.cn/u/26691/,内有moto a1200开发随笔,对于熟悉和了解手机native linux开发有很大帮助。
4. MTK:
MTK最近几年异军突起,近70%的国产手机采用MTK的芯片和平台,黑手机更几乎是MTK的代名词。国内厂家只有夏新没有采用MTK的方案。 MTK的模式名为“Turn-key”的全面解决方案,厂商采用了这个方案,只需要加一个手机外壳即可成品——这能大大降低了出货时间,一般厂家只修改界 面、铃声以及增加一些应用软件。有关MTK平台的介绍,见环球企业家杂志的文章“国产手机操纵者联发科的秘密”http://www.cnbeta.com/articles/45580.htm。
MTK是私有平台,目前没有书籍介绍MTK平台,所以只能从网上查找MTK的资料。以下资料大家可以从网上获得,对于了解MTK很有帮助: 《mtk 训练课程.pdf》、《MMI Platform Source Code Training.pdf》主要是MMI界面开发介绍、《MMI Resource & Customization Tool.pdf》MMI资源工具介绍。
最近,MTK平台MMI设计牛人FUGUI自己编写了一本有关mtk平台MMI开发的实例教程,书名为《MMI实例培训教程》(本书大家通过 Google下载到),此书深入浅出,全面的介绍了MTK平台MMI开发的各个方面,通过本书,开发人员将能很快进入MTK平台开发领域,实为MTK平台 MMI开发的圣经!MTK平台的操作系统为nucleus,有关nucleus的介绍网上有一篇文章《Nucleus实时操作系统分析报告》。MTK平台 主要用C语言开发,所以要熟悉MTK开发,首先必须熟悉掌握C语言,MTK的sdk与vc6集成,MMI的各控件和窗口之间通过回调函数实现通讯。
关于MTK的开发网站和论坛:
我爱研发网:http://www.52rd.com/ 上面几篇文章和书籍都能从本网站找到。
手机研发论坛:http://www.1mp.cc/bbs/index.asp
5. 展讯:
展讯平台07年也发展很快,利用MTK下半年PA放大器缺货的机会,趁势而入,抢走mtk很多市场份额。展讯的开发模式和MTK的很类似,基本也是给厂家提供整体解决方案,与MTK的差别见此链接http://www.chinabyte.com/telecom/267/2507267.shtml。 国内主要是夏新、联想、文泰等采用展讯平台。展讯平台采用的嵌入式操作系统是threadx,关于threadx的有一本中文书《嵌入式实时操作系统的多 线程计算:基于ThreadX和ARM》。同MTK平台一样,为封闭平台,开发语言为C,开发环境为vc6, MMI的各控件和窗口之间与windows类似通过消息进制实现通讯。另外也没有书籍介绍展讯平台,以下资料值得推荐:
《Spreadtrum_SAP.ppt》
《MMK_Kernel软件API接口说明书.doc》
《MMK_Window_Table开发说明书.doc》
《展讯平台MMI窗口开发说明书.pdf》
《展讯手机平台软件简介.pdf》
关于展讯的开发网站和论坛:
我爱研发网:http://www.52rd.com/ 上面几篇文章都能从本网站找到。
手机研发论坛:http://www.1mp.cc/bbs/index.asp
6. J2ME:
J2ME平台为手机上运用最广泛的开放式平台,绝大部分手机均已经支持J2ME了。关于J2ME的书籍数不胜数,个人推荐以下书籍:
《j2me技术手册》
《J2ME开发大全》
《J2ME移动应用程序开发》
关于J2ME的开发网站和论坛:
J2ME开发网:http://www.j2medev.com/Index.html
中国Java手机网:http://www.cnjm.net/
以及各手机厂商的官方java论坛
7. Brew
Brew 的全称是无线二进制运行时环境。Brew平台是高通公司开发的,从无线应用程序开发、设备配置、应用程序分发以及计费和支付的完整端到端解决方案中的无线 应用程序开发部分。目前绝大部分CDMA手机都支持Brew平台。学习Brew平台,首先需要熟悉c语言。学习步骤和方法可参考” BREW高手之路-解析BREW学习过程”。
学习书籍:
《深入BREW手机游戏开发》
《BREW 技术开发与应用》
这些书虽然不够深入,但对于入门还是可以参考的。
关于Brew的开发网站和论坛:
Brew官方论坛:http://brewforums.qualcomm.com/index.php
8. iPhone
Windows平台iPhone开发环境搭建方法见笔者的文章《Windows平台上iPhone基于cygwin开发环境的搭建方法》
http://canco.javaeye.com/admin/blogs/199106
开发入门介绍见笔者的文章《iPhone手机开发平台入门介绍和教程》
http://canco.javaeye.com/admin/blogs/199144
9. Blackberry,Android
黑莓公司BlackBerry手机和Google的Android手机均只支持java开发。BlackBerry的开发网站和论坛:
BlackBerry开发者指南:http://www.cnblogs.com/confach/category/36451.htmlBlackBerry官方网站:http://na.blackberry.com/eng/developers/community.jsphttp://bbs.maxpda.com/forum-184-1.html
Android的开发网站和论坛:
http://www.androiddev.net.cn/bbs/
http://www.androidin.com/http://www.androidcn.net/
http://bbs.maxpda.com/forum-190-1.html
10. 其它Feather phone平台
其它feather phone平台,如TI、飞利浦、英飞凌(Infineon)、飞思卡尔(Freescale)、Broadcom、Skyworks等平台,由于平台私有,并且不提供第三方sdk,所以也没有相关资料和文档,希望有了解的朋友介绍一下。
2010-07-08
[转] 让自行车飞起来 双轮离地
出处
http://www.chinabike.net/newbbs/dispbbs.asp?BoardID=10&replyID=50586&id=48786&skin=0
我来说详细的吧~转至一个车友的~~不过我忘了叫什么了~~~如果作者看到了~要原谅我哦~~嘿嘿~
首先骑行有一定的速度 冲向目标 如果目标很高 速度就相对慢一些 如果目标很宽需要飞远一点 那么速度要快
1、身体下压 重心靠前 压在前轮上的感觉 像爬很陡的陡坡的发力动作 注意双脚踏在脚踏上 整个脚掌的中心和脚踏的中心吻合 便于之后大力勾带 且落地时不易脱脚
2、离目标1至1.5个轮长的距离时微微离座 果断双臂发力将身体向后推 同时身体向上站起伸展
3、这时候由于身体向后的惯性 车头已经被身体推带了起来 此时身体也站立了起来 身体和车身形成了一个V字形 仅仅是后轮在着地 注意控制车头抬起的高度 不要太高以至于后仰翻车 有那么零点几秒 你正在进行后轮滑的动作
4、当前轮刚好到达目标正上方时 不要犹豫了 立即双腿发力 整个人上跳 这个动作和前面推车头时身体站起伸展是一个连续的动作 只是伸展身体时是缓慢的 此时发力上跳是毫不犹豫的 注意上跳时脚掌向下压 很自然的准备勾带 很多朋友问过我 上跳时因该会跳离车身 脚会离开脚踏的 要诀就是这个脚掌下压上跳 试试 脚掌踏在脚踏上 脚踏是会转动的 脚尖下压一点 不影响你发力跳起
5、跳起来时 由于脚掌和脚踏的角度 车身会后部会被勾带起来 此时大力主动勾带 同时要有一个身体下蹲的动作趋势 想想 就是此时人车都在空中 等于你在空中有个缩腿收脚的动作 学过体操的朋友一定知道 空中缩腿的技术感觉 就是空中蹲身
6、勾带的同时 双手也别闲着 将车向前方送出 这样车由立起的状态重新转为平行于地面的状态
7、车头下压 准备着地 要根据空中姿态和地面倾斜来决定着地的姿态 着地点是平面或者下坡 那么要保证前轮着地 这样 缓冲全部由前叉来吸收了 而且是缓缓吸收的 注意 我说的先着地 只是一个趋势 只是先那么零点零几妙 最好的就是双轮同时着地 如果前轮着地太早 就需要做一个很多人不注意的技术动作 就是重心后撤 双臂将车子向前方推送出去 这样第一防止前翻 第二后轮着地时就不会硬邦邦的砸在地面上 而是飘落在地面上
2010-05-24
真正的中国上乘武功 释�建 搏击 切磋 论道 精华 捎带说说叶问2
个人认为:
武艺是美称
武术略带贬义 儒家所谓术数
如果你深入看了这些 一定会对电影 叶问 很失望的
洪金宝在电影上 说为了生活可以忍 为了中国武术 不能忍
实际上 洪金宝拍这部电影恰恰是 有辱中国功夫 恰恰是为了生活不能忍 辱了中国功夫可以忍
另外 为了煽情 将外国拳手塑造为一个彻底的民族主义者 比国人还国人 很无聊
而且外国拳手代表的不是英国 而是整个西方 这完全是自卑国人的本位想法
人首先要为了个人尊严而战 其次才是族群
套用某人的一句话 争取你个人的尊严 为了国家
片尾不忘拍河蟹的马屁
2010-05-06
转:Linux 关于动态链接库以及静态链接库的一些概念
Linux 关于动态链接库以及静态链接库的一些概念
From http://os.rdxx.com/Linux/LinuxRudiment/2008/5/17017197011.shtml库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀。例如:libhello.so libhello.a
为了在同一系统中使用不同版本的库,可以在库文件名后加上版本号为后缀,例如: libhello.so.1.0,由于程序连接默认以.so为文件后缀名。所以为了使用这些库,通常使用建立符号连接的方式。
ln -s libhello.so.1.0 libhello.so.1
ln -s libhello.so.1 libhello.so
使用库
当 要使用静态的程序库时,连接器会找出程序所需的函数,然后将它们拷贝到执行文件,由于这种拷贝是完整的,所以一旦连接成功,静态程序库也就不再需要了。然 而,对动态库而言,就不是这样。动态库会在执行程序内留下一个标记‘指明当程序执行时,首先必须载入这个库。由于动态库节省空间,linux下进行连接的 缺省操作是首先连接动态库,也就是说,如果同时存在静态和动态库,不特别指定的话,将与动态库相连接。
现在假设有一个叫hello的程序开发包,它提供一个静态库libhello.a 一个动态库libhello.so,一个头文件hello.h,头文件中提供sayhello()这个函数
/* hello.h */
void sayhello();
另外还有一些说明文档。这一个典型的程序开发包结构
1.与动态库连接
linux默认的就是与动态库连接,下面这段程序testlib.c使用hello库中的sayhello()函数
/*testlib.c*/
#include
#include
int main()
{
sayhello();
return 0;
}
使用如下命令进行编译
$gcc -c testlib.c -o testlib.o
用如下命令连接:
$gcc testlib.o -lhello -o testlib
在连接时要注意,假设libhello.o 和libhello.a都在缺省的库搜索路径下/usr/lib下,如果在其它位置要加上-L参数
与与静态库连接麻烦一些,主要是参数问题。还是上面的例子:
$gcc testlib.o -o testlib -WI,-Bstatic -lhello
注:这个特别的"-WI,-Bstatic"参数,实际上是传给了连接器ld.
指示它与静态库连接,如果系统中只有静态库当然就不需要这个参数了。
如果要和多个库相连接,而每个库的连接方式不一样,比如上面的程序既要和libhello进行静态连接,又要和libbye进行动态连接,其命令应为:
$gcc testlib.o -o testlib -WI,-Bstatic -lhello -WI,-Bdynamic -lbye
3.动态库的路径问题
为了让执行程序顺利找到动态库,有三种方法:
(1)把库拷贝到/usr/lib和/lib目录下。
(2)在LD_LIBRARY_PATH环境变量中加上库所在路径。例如动态库libhello.so在/home/ting/lib目录下,以bash为例,使用命令:
$export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/ting/lib
(3) 修改/etc/ld.so.conf文件,把库所在的路径加到文件末尾,并执行ldconfig刷新。这样,加入的目录下的所有库文件都可见、
4.查看库中的符号
有 时候可能需要查看一个库中到底有哪些函数,nm命令可以打印出库中的涉及到的所有符号。库既可以是静态的也可以是动态的。nm列出的符号有很多,常见的有 三种,一种是在库中被调用,但并没有在库中定义(表明需要其他库支持),用U表示;一种是库中定义的函数,用T表示,这是最常见的;另外一种是所谓的“弱 态”符号,它们虽然在库中被定义,但是可能被其他库中的同名符号覆盖,用W表示。例如,假设开发者希望知道上央提到的hello库中是否定义了 printf():
$nm libhello.so |grep printf
U printf
U表示符号printf被引用,但是并没有在函数内定义,由此可以推断,要正常使用hello库,必须有其它库支持,再使用ldd命令查看hello依赖于哪些库:
$ldd hello
libc.so.6=>/lib/libc.so.6(0x400la000)
/lib/ld-linux.so.2=>/lib/ld-linux.so.2 (0x40000000)
从上面的结果可以继续查看printf最终在哪里被定义,有兴趣可以go on
生成库
第一步要把源代码编绎成目标代码。以下面的代码为例,生成上面用到的hello库:
/* hello.c */
#include
void sayhello()
{
printf("hello,world\n");
}
用gcc编绎该文件,在编绎时可以使用任何全法的编绎参数,例如-g加入调试代码等:
gcc -c hello.c -o hello.o
1.连接成静态库
连接成静态库使用ar命令,其实ar是archive的意思
$ar cqs libhello.a hello.o
2.连接成动态库
生成动态库用gcc来完成,由于可能存在多个版本,因此通常指定版本号:
$gcc -shared -Wl,-soname,libhello.so.1 -o libhello.so.1.0 hello.o
另外再建立两个符号连接:
$ln -s libhello.so.1.0 libhello.so.1
$ln -s libhello.so.1 libhello.so
这样一个libhello的动态连接库就生成了。最重要的是传gcc -shared 参数使其生成是动态库而不是普通执行程序。
-Wl 表示后面的参数也就是-soname,libhello.so.1直接传给连接器ld进行处理。实际上,每一个库都有一个soname,当连接器发现它正 在查找的程序库中有这样一个名称,连接器便会将soname嵌入连结中的二进制文件内,而不是它正在运行的实际文件名,在程序执行期间,程序会查找拥有 soname名字的文件,而不是库的文件名,换句话说,soname是库的区分标志。
这样做的目的主要是允许系统中多个版本的库文件共存,习惯上在命名库文件的时候通常与soname相同
libxxxx.so.major.minor
其中,xxxx是库的名字,major是主版本号,minor 是次版本号
=====================
摘要:动态链接库技术实现和设计程序常用的技术,在Windows和Linux系统中都有动态库的概念,采用动态库可以有效的减少程序大小,节省空间,提 高效率,增加程序的可扩展性,便于模块化管理。但不同操作系统的动态库由于格式 不同,在需要不同操作系统调用时需要进行动态库程序移植。本文分析和比较了两种操作系统动态库技术,并给出了将Visual C++编制的动态库移植到Linux上的方法和经验。
1、引言
动态库(Dynamic Link Library abbr,DLL)技术是程序设计中经常采用的技术。其目的减少程序的大小,节省空间,提高效率,具有很高的灵活性。采用动态库技术对于升级软件版本更加 容易。与静态库(Static Link Library)不同,动态库里面的函数不是执行程序本身的一部分,而是根据执行需要按需载入,其执行代码可以同时在多个程序中共享。
在Windows和Linux操作系统中,都可采用这种方式进行软件设计,但他们的调用方式以及程序编制方式不尽相同。本文首先分析了在这两种操作系 统中通常采用的动态库调用方法以及程序编制方式,然后分析比较了这两种方式的不同之处,最后根据实际移植程序经验,介绍了将VC++编制的Windows 动态库移植到Linux下的方法。
2、动态库技术
2.1 Windows动态库技术
动态链接库是实现Windows应用程序共享资源、节省内存空间、提高使用效率的一个重要技术手段。常见的动态库包含外部函数和资源,也有一些动态库 只包含资源,如Windows字体资源文件,称之为资源动态链接库。通常动态库以.dll,.drv、.fon等作为后缀。相应的windows静态库通 常以.lib结尾,Windows自己就将一些主要的系统功能以动态库模块的形式实现。
Windows动态库在运行时被系统加载到进程的虚拟空间中,使用从调用进程的虚拟地址空间分配的内存,成为调用进程的一部分。DLL也只能被该进程 的线程所访问。DLL的句柄可以被调用进程使用;调用进程的句柄可以被DLL使用。DLL模块中包含各种导出函数,用于向外界提供服务。DLL可以有自己 的数据段,但没有自己的堆栈,使用与调用它的应用程序相同的堆栈模式;一个DLL在内存中只有一个实例;DLL实现了代码封装性;DLL的编制与具体的编 程语言及编译器无关,可以通过DLL来实现混合语言编程。DLL函数中的代码所创建的任何对象(包括变量)都归调用它的线程或进程所有。
根据调用方式的不同,对动态库的调用可分为静态调用方式和动态调用方式。
(1)静态调用,也称为隐式调用,由编译系统完成对DLL的加载和应用程序结束时DLL卸载的编码(Windows系统负责对DLL调用次数的计 数),调用方式简单,能够满足通常的要求。通常采用的调用方式是把产生动态连接库时产生的.LIB文件加入到应用程序的工程中,想使用DLL中的函数时, 只须在源文件中声明一下。 LIB文件包含了每一个DLL导出函数的符号名和可选择的标识号以及DLL文件名,不含有实际的代码。Lib文件包含的信息进入到生成的应用程序中,被调 用的DLL文件会在应用程序加载时同时加载在到内存中。
(2)动态调用,即显式调用方式,是由编程者用API函数加载和卸载DLL来达到调用DLL的目的,比较复杂,但能更加有效地使用内存,是编制大型应用程序时的重要方式。在Windows系统中,与动态库调用有关的函数包括:
①LoadLibrary(或MFC 的AfxLoadLibrary),装载动态库。
②GetProcAddress,获取要引入的函数,将符号名或标识号转换为DLL内部地址。
③FreeLibrary(或MFC的AfxFreeLibrary),释放动态链接库。
在windows中创建动态库也非常方便和简单。在Visual C++中,可以创建不用MFC而直接用C语言写的DLL程序,也可以创建基于MFC类库的DLL程序。每一个DLL必须有一个入口点,在VC++ 中,DllMain是一个缺省的入口函数。DllMain负责初始化(Initialization)和结束(Termination)工作。动态库输出 函数也有两种约定,分别是基于调用约定和名字修饰约定。DLL程序定义的函数分为内部函数和导出函数,动态库导出的函数供其它程序模块调用。通常可以有下 面几种方法导出函数:
①采用模块定义文件的EXPORT部分指定要输入的函数或者变量。
②使用MFC提供的修饰符号_declspec(dllexport)。
③以命令行方式,采用/EXPORT命令行输出有关函数。
在windows动态库中,有时需要编写模块定义文件(.DEF),它是用于描述DLL属性的模块语句组成的文本文件。
2.2 Linux共享对象技术
在Linux操作系统中,采用了很多共享对象技术(Shared Object),虽然它和Windows里的动态库相对应,但它并不称为动态库。相应的共享对象文件以.so作为后缀,为了方便,在本文中,对该概念不进 行专门区分。Linux系统的/lib以及标准图形界面的/usr/X11R6/lib等目录里面,就有许多以so结尾的共享对象。同样,在Linux 下,也有静态函数库这种调用方式,相应的后缀以.a结束。Linux采用该共享对象技术以方便程序间共享,节省程序占有空间,增加程序的可扩展性和灵活 性。Linux还可以通过LD-PRELOAD变量让开发人员可以使用自己的程序库中的模块来替换系统模块。
同Windows系统一样,在Linux中创建和使用动态库是比较容易的事情,在编译函数库源程序时加上-shared选项即可,这样所生成的执行程 序就是动态链接库。通常这样的程序以so为后缀,在Linux动态库程序设计过程中,通常流程是编写用户的接口文件,通常是.h文件,编写实际的函数文 件,以.c或.cpp为后缀,再编写makefile文件。对于较小的动态库程序可以不用如此,但这样设计使程序更加合理。
编译生成动态连接库后,进而可以在程序中进行调用。在Linux中,可以采用多种调用方式,同Windows的系统目录(..\system32等) 一样,可以将动态库文件拷贝到/lib目录或者在/lib目录里面建立符号连接,以便所有用户使用。下面介绍Linux调用动态库经常使用的函数,但在使 用动态库时,源程序必须包含dlfcn.h头文件,该文件定义调用动态链接库的函数的原型。
(1)_打开动态链接库:dlopen,函数原型void *dlopen (const char *filename, int flag);
dlopen用于打开指定名字(filename)的动态链接库,并返回操作句柄。
(2)取函数执行地址:dlsym,函数原型为: void *dlsym(void *handle, char *symbol);
dlsym根据动态链接库操作句柄(handle)与符号(symbol),返回符号对应的函数的执行代码地址。
(3)关闭动态链接库:dlclose,函数原型为: int dlclose (void *handle);
dlclose用于关闭指定句柄的动态链接库,只有当此动态链接库的使用计数为0时,才会真正被系统卸载。
(4)动态库错误函数:dlerror,函数原型为: const char *dlerror(void); 当动态链接库操作函数执行失败时,dlerror可以返回出错信息,返回值为NULL时表示操作函数执行成功。
在取到函数执行地址后,就可以在动态库的使用程序里面根据动态库提供的函数接口声明调用动态库里面的函数。在编写调用动态库的程序的makefile文件时,需要加入编译选项-rdynamic和-ldl。
除了采用这种方式编写和调用动态库之外,Linux操作系统也提供了一种更为方便的动态库调用方式,也方便了其它程序调用,这种方式与Windows 系统的隐式链接类似。其动态库命名方式为“lib*.so.*”。在这个命名方式中,第一个*表示动态链接库的库名,第二个*通常表示该动态库的版本号, 也可以没有版本号。在这种调用方式中,需要维护动态链接库的配置文件/etc/ld.so.conf来让动态链接库为系统所使用,通常将动态链接库所在目 录名追加到动态链接库配置文件中。如具有X window窗口系统发行版该文件中都具有/usr/X11R6/lib,它指向X window窗口系统的动态链接库所在目录。为了使动态链接库能为系统所共享,还需运行动态链接库的管理命令./sbin/ldconfig。在编译所引 用的动态库时,可以在gcc采用 ?l或-L选项或直接引用所需的动态链接库方式进行编译。在Linux里面,可以采用ldd命令来检查程序依赖共享库。
3、两种系统动态库比较分析
Windows和Linux采用动态链接库技术目的是基本一致的,但由于操作系统的不同,他们在许多方面还是不尽相同,下面从以下几个方面进行阐述。
(1)动态库程序编写,在Windows系统下的执行文件格式是PE格式,动态库需要一个DllMain函数作为初始化的人口,通常在导出函数的声明 时需要有_declspec(dllexport)关键字。Linux下的gcc编译的执行文件默认是ELF格式,不需要初始化入口,亦不需要到函数做特 别声明,编写比较方便。
(2)动态库编译,在windows系统下面,有方便的调试编译环境,通常不用自己去编写makefile文件,但在linux下面,需要自己动手去编写makefile文件,因此,必须掌握一定的makefile编写技巧,另外,通常Linux编译规则相对严格。
(3)动态库调用方面,Windows和Linux对其下编制的动态库都可以采用显式调用或隐式调用,但具体的调用方式也不尽相同。
(4)动态库输出函数查看,在Windows中,有许多工具和软件可以进行查看DLL中所输出的函数,例如命令行方式的dumpbin以及VC++工 具中的DEPENDS程序。在Linux系统中通常采用nm来查看输出函数,也可以使用ldd查看程序隐式链接的共享对象文件。
(5)对操作系统的依赖,这两种动态库运行依赖于各自的操作系统,不能跨平台使用。因此,对于实现相同功能的动态库,必须为两种不同的操作系统提供不同的动态库版本。
4、动态库移植方法
如果要编制在两个系统中都能使用的动态链接库,通常会先选择在Windows的VC++提供的调试环境中完成初始的开发,毕
2010-03-31
偶像 火狐的主要作者
偶像
in reference to: Google Image Result for http://devaka.ru/images/250.jpg (view on Google Sidewiki)2010-03-18
Google Sidewiki entry by Andrew
呵呵 咬文嚼字 引经据典
坐而论 不如起而行 白话不如白打
"探解“白打蹴鞠”——“白打”最初的文本义意"
- 探解“白打蹴鞠”——“白打”最初的文本义意--邢源的blog (view on Google Sidewiki)
2010-03-13
Google Sidewiki entry by Andrew
神奇
in reference to:"一个说法是,太阳与地球的距离是地球与月球的395倍远,而太阳的直径也“正好”是月球的395倍,因此从地球上看太阳与月球几乎是一样大。注意。此说法并没有考虑某时刻地月日的相对位置,不宜引用于严谨的科学讨论中。"
- 月球 - 维基百科,自由的百科全书 (view on Google Sidewiki)
2010-03-12
超车方面还需进一步探索
目前的方法有些回避问题
当前面的pod 为了 观看风景 希望慢慢的行驶 而后面的pod 想要尽快通过时 问题很难调和
"There is no need for an overtaking lane."
- Shweeb (view on Google Sidewiki)
can not select windows xp
can not select windows xp , bugs?
in reference to:"Operating system:"
- Share Toolbar feedback - Toolbar Help (view on Google Sidewiki)
能超车吗?
不能超车 引发一个人品问题
实际应用中 如果有些不自觉地人偷懒 不蹬会怎样?
能到需要设计一套 根据做功多少的激励系统? 真是个麻烦的问题
2010-03-10
Google Sidewiki entry by Andrew
阿凡达 呵呵
字典中这样解释
2.【电脑】(术语)指在虚拟实境中互动地呈现一个人;
"avatars"
- Internet of Things - Wikipedia, the free encyclopedia (view on Google Sidewiki)
2010-03-08
Google Sidewiki entry by Andrew
强大
in reference to:"2009年11 月17号,感谢俄罗斯的黑客,侵入了东英吉利大学的教授电脑。最后发现是一场大骗局,里面的数据几乎全部捏造。"
- 2010年经济趋势 - 郎咸平的和讯博客 - 郎咸平blog - 和讯博客 (view on Google Sidewiki)
2010-02-24
Dream job!
Dream job!
in reference to:"去哪儿酒店试睡员 HotHot 工作时间: 6个月 职位薪酬: 每月一万人民币,半年期去哪儿专聘员工合约 申请条件: 年满18周岁,性别不限,具有热情、理性、还有异于常人的敏锐观察力与感受力,热爱旅游、乐于分享所见所闻,勇于冒险尝试新事物。 工作内容: 帮助消费者更了解酒店的特色与提供最真实可靠的评论,通过实地体验、拍照、完成酒店点评。 1.搜寻与探索中国最具特色的酒店与最新开业的酒店。 2.工作期间内不定期免费入住酒店,进行酒店点评,发表点评内容。 3.收发回复用户信件或问题,不定期接受媒体采访。 4.维护个人博客,分享第一手酒店图片与影片。 申请方式: 请将个人简历上传至zhaopin.qunar.com 注意事项: 提醒您此职位仅接受线上报名,收件日至2010-3-1 13:00, 若您还有任何其他疑问,请发送邮件到dreamjob@qunar.com"
- 机票、酒店、签证、比价、打折--去哪儿旅游搜索引擎 Qunar.com (view on Google Sidewiki)
2010-02-21
great tools!
I love
thanks the author!
伟大的工具
2010-02-18
最近开始的两个开源小项目 易经鼠标起卦器 身份证号码 解析器
易经鼠标起卦器
发布
- IE: 鼠标左键点此直接运行,右键保存到你的电脑
- 火狐/Google Chrome: 只能下载后运行(请点击右键->另存到你的电脑->用火狐打开)
概率说明
- 本程序没有使用任何伪随机数生成器
- 完全根据您的随机动作起卦
- 概率与使用三枚硬币的经典方法相同 参见 http://www.dentato.it/iching/ (莫名其妙被墙了 戴tor才能访问)
特点
感谢
联系我
----------------------------------------------------------
身份证号码 解析器
2010-01-22
无尾电视 的前世今生 向 尼古拉斯 特斯拉 致敬
2米左右距离的输电 几乎马上就要进入家电领域
国际消费电子展 海尔推出全球首台"无尾电视"
技术来自麻省理工的早先的 磁耦合共振 无线供电技术 WiTricity
往前追溯
尼古拉斯 特斯拉的特斯拉线圈
http://en.wikipedia.org/wiki/Nikola_Tesla
题外话 爱迪生对特斯拉太不厚道
1884 年,特斯拉第一次踏上美国国土,来到了纽约。除了前雇主 Charles Batchelor 所写的推荐函外,他几乎是一无所有。这封信是写给爱迪生的,当中提到:“我知道有两个伟大的人,你是其中之一,另一个就是这个年轻人了。”爱迪生雇用了特斯拉,安排他在爱迪生机械公司工作。特斯拉开始为爱迪生进行简单的电器设计,他进步很快,不久以后就能解决公司最难的问题了。特斯拉完全负责了爱迪生公司直流电机的重新设计。
1919年,特斯拉写道:如果他完成马达和发电机的改进工作,爱迪生将提供给他惊人的50000美元(如计入通货膨胀,相当于今天(2006年)的 1,000,000美元)。特斯拉说他的工作持续了将近一年,几乎整个重新设计了,使爱迪生公司从中获得巨大的利润和新的专利所有权。当特斯拉要求 50000美元时,据传闻爱迪生回答他:“特斯拉,你不懂我们美国人的幽默”,从而违背了自己的诺言。这笔奖金的金额相当于公司创始资本,而以特斯拉当时 每周18美元的薪水,他需要工作53年才能赚到。当特斯拉要求加薪至每周25美元遭到拒绝后,他辞职了。
利用共振原来
麻省理工学院研究小组在约2米的距离上实现40%效率的无线输电,使我们至少看到了在家庭里省去一些电线的希望。他们所用方法的核心在于“共振”。
物体在特定频率下会比较容易振动,在其他频率下则不然,这些特定频率称为固有频率或共振频率。有着相同共振频率的物体,彼此交换能量的效率比较高。玩过乐器的人都对共振有直观认识。中学物理老师会给学生做这样的共振实验:两个相同的音叉,敲其中一个,另一个也会抖动发声。
将共振原理应用于电力传输并不是索尔加斯克等人的首创,特斯拉当年的无线输电构想,就是在地球和电离层之间建立约8赫兹的低频共振,利用环绕地球表面的电 磁波传输能量。在地球和电离层构成的天地谐振腔里,电磁波能量损耗很少。特斯拉的实验中止后,并没有人继承这项研究,其中一个原因也许是在这种方式下电力 公司没办法向用户收钱吧。
人类有时只能将错就错我们的教科书里只说 爱迪生 法拉第 麦克斯韦 安培 竟然只字不提 特斯拉 离奇
不知道又有什么意识形态在作怪
微软亚洲研究院有另一个设想
个人感觉远不及上面的方案
适合极近距离 桌面使用
出处
http://www.msra.cn/Research/ItemDetail.aspx?guid=19c6289f-f67e-4777-a831-d152acc860bc
无线供电桌面 研究方向:自然用户界面
研究小组:平台元件中心 2007/10/11
我 们设计和实现了一种通用的无线供电桌面(Universal Wireless Power Surface),只需将笔记本、手机、PDA等移动设备随意放置在桌面上,便会自动地开始充电或供电(如图1所示)。在桌面和移动设备之间不需要电源线 的连接,电能以无线的方式从供电桌面传给移动设备。
详细内容: 当人们的上网方式逐渐从有线向无线过渡的时候,更多的用户会期待着电的传输什么时候能够像网络一样摆脱线的束缚呢?在此,微软亚洲研究院平台器件组的研究员们将为你揭示无线桌面供电技术的可能。
当前,数据的传输越来越广泛地采用无线的方式,比如Wi-Fi、Bluetooth、UWB等等。然而,电能的传输基本上还没有摆脱线的束缚,一般是采用直接电接触的有线传输方式。
现在的移动设备,比如手机,PDA,数码相机,mp3,笔记本电脑等,在充电或供电时,通常要把充电器或电源适配器(Power Adapter)一端连在市电电源上,另外一端连在移动设备上;或者把电池取出放在充电器上进行充电。频繁的插拔不但使用不便,且有安全隐患。目前,不同 的设备通常使用不同的充电或供电接口,出差时,有多个移动设备就需要携带多个充电器或电源适配器,不但不方便,而且造成了浪费。
我们设计和实现了一种通用的无线供电桌面(Universal Wireless Power Surface),只需将笔记本、手机、PDA等移动设备随意放置在桌面上,便会自动地开始充电或供电(如图1所示)。在桌面和移动设备之间不需要电源线 的连接,电能以无线的方式从供电桌面传给移动设备。
设想在未来,家里、会议室、咖啡厅、汽车、机场里等等都有这种无线供电的桌面,人们不再需要携带各种充电器或电源适配器,不再需要频繁的插拔,只需要把手机、笔记本等移动设备随意放在桌面上就可以自动地充电或供电了,不用再担心电源的问题。
系统结构如图2所示,包括无线供电桌面和移动负载设备内嵌的模块两部分。
电能的无线传输是基于电磁感应原理工作的。供电桌面内的发射线圈和负载设备内的接收线圈构成了一个可分离的疏松耦合变压器,通过电磁感应,供电桌面 端电源输出的能量以非接触的方式传送到负载设备,负载设备内嵌有转换模块将交流电转换成负载设备所需要的直流电。供电桌面由很多小线圈组成,构成了一个供 电线圈矩阵,其中每个线圈都有独立的开关控制是否导通。供电桌面只对负载设备下面的一小块区域线圈供电,其他没有负载的区域不会发射电能。当桌面上没有负 载设备时,整个供电线圈矩阵的每个线圈都是被关断的。这样不仅增加了系统的效率,而且降低了电磁辐射。
如何检测出桌面上是否放置了负载设备,并能判断出负载设备放在什么位置呢?我们提出并实现了RFID(Radio Frequency Identification)定位技术。
每个负载设备都嵌入了RFID标签(tag),具有一个设备ID号。供电桌面内除了有供电线圈矩阵外,还有定位线圈矩阵和RFID检测器,用来读取 负载设备的RFID标签ID,判断出负载设备是否存在,如果存在则判断出其在定位线圈矩阵中的位置。没有内嵌具有合法数据的RFID标签的物体,比如杯 子、人手等,供电桌面不会对其下方的区域供电,保证了检测的可靠性和使用的安全性。RFID标签内除了含有设备ID外,设备的功率需求,负载设备电池是否 已被充满等信息也可以通过RFID传输给供电桌面,供电桌面的信息也可以传输给移动设备。通过双向地数据通信,增加了系统的智能性。
负载设备的定位具有一定的精度,保证了设备随意放置在桌面上,均能检测到其位置,提高了使用的方便性。
对于电磁辐射问题,我们采取了多种安全保护措施。首先,没有负载设备的地方不会向外辐射强电磁场,供电桌面只对负载设备下面的一小块区域线圈供电, 当负载设备被移走时,原来在其下面的线圈会停止供电。为了屏蔽供电时负载设备下面的电磁辐射,在供电桌面线圈矩阵的下面和设备模块接收线圈的上面及四周均 包裹着磁性材料和金属材料,在其内部形成了封闭式的闭合磁路,极大地降低了泄漏出来的电磁辐射,并提高了系统效率。检测负载设备位置时用的RFID是在超 近距离下工作,采用了较微弱的信号。
2006年3月,给约50W的笔记本电脑无线供电和充电的实验成功完成。目前,我们的无线供电桌面原型板长度和宽度均是30厘米,系统整体效率约为 50%~60%。2007年4月,第一个完整的系统演示原型板已被运往在美国的Microsoft Executive Briefing Center准备做新技术成果展示。
我们正致力于进一步降低系统成本和提高系统效率,使这项技术能够早日普及,给人们的生活带来便利。