天天好味道

没钱没权没户口,靠走靠吼靠小狗
随笔 - 68, 文章 - 1, 评论 - 517, 引用 - 5

导航

<2008年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

留言簿(12)

随笔分类

随笔档案

文章档案

我的链接

搜索

最新评论

阅读排行榜

评论排行榜

[S60] ARM平台独有问题 Writable Static Data in DLLs

原文在:
http://hi.baidu.com/hijzhang/blog/item/b6d5bf24b44d41318744f983.html

在编译arm平台程序的时候,出现如下错误提示:
ERROR: Dll 'AppName[UID].APP' has initialised data.
或者:
ERROR: Dll 'AppName[UID].APP' has uninitialised data.
(扩展名APP的应用程序其实也是一个DLL。)

而在为模拟器编译的时候,这个问题不会出现。这曾经导致我在完成完整的设计,编码和调试后,
被迫放弃原有设计。

从这条错误信息的字面意思是什么也看不出来的。initialised 和 uninitialised都一样有问题。
其实真正的含义是Dll里存在可写的全局变量。

大家知道在程序运行的时候,DLL只会被装载一次。在Windows平台,每个进程都有自己独立的DLL空间。也就是说,不同进程装载同一个DLL,互相之间是独立的。只有在一个进程内,才是共享的。但是S60平台的设计是所有进程都共享同一个DLL空间。这样的设计显然是出于节约内存的目的,是很有必要的。但是这样就带来一个问题,那就是DLL里不可以有可写的全局变量,否则就要造成混乱。A进程对变量的改写会直接影响到B进程,这是程序设计者所不愿意看到的。所以,S60平台的编译器就禁止了在DLL内申明可写全局变量。但是全局变量还是可以用的,只要加上const申明即可。

一般来说,在做DLL设计的时候,的确不鼓励使用可写全局变量。即使是windows平台,DLL的可写全局变量也会在不同模块之间带来问题。当遇到这个编译器错误的时候,应该设法修改设计,回避使用全局变量。

但是因为APP实际上也是DLL,这就导致连S60的主程序也不能使用可写的全局变量,这个在某些时候就成了问题,全局变量毕竟是一个重要的实现手段。对此,S60提供了线程局部存储(thread local storage)来解决问题。
TLS的关键是两个函数:
void Dll::SetTls(void*)和void* Dll::Tls()
SetTls用于将任意类型的指针保存到线程局部存储中,而Tls()则取出该指针。
指针指向在堆上分配的一块内存。一个线程只能有一个局部存储变量。所以,如果你有很多全局变量,就要定义一个结构,把所有的全局变量封装在其中。这是挺别扭的,不过S60 3rd据说就支持dll的可写全局变量了。

tls样例代码:

设置
GlobalData* p = new GlobalData();
if ( p )
{
Dll::SetTls( p );
}

使用
GlobalData* p = (GlobalData*) Dll::Tls();

posted on 2007-07-09 09:03 jzhang 阅读(3604) 评论(12)  编辑 收藏

评论

# re: [S60] ARM平台独有问题 Writable Static Data in DLLs

提醒一下,这个跟ARM平台无关,主要是Symbian OS的独有的问题。

“在windows平台,DLL的可写全局变量会在不同模块之间带来问题”这句话也不对,在任何成熟的OS,一般Text段是共享的,但是Data段都是进程独立的。

基本来说,Symbian OS由于出现得比较早,因此限制比较多,给程序员带来很多问题。不仅仅是全局变量,静态变量也不能存在。总之,不要把Symbian这些无聊的限制归到ARM上。

2007-07-22 01:12 | vic

# re: [S60] ARM平台独有问题 Writable Static Data in DLLs

we are biggest selling runesape gold website
[b][url=http://www.goldsrunescape.com]RuneScape[/url]
[url=http://www.runescape2gold.net]RuneScape[/url][/b]
2007-07-22 05:39 | goldsrunescape

# 恩,没错

我的意思是s60开发一般使用模拟器和真实硬件。
在真实硬件上运行的S60有这个问题,说arm是
一个代称,不严谨。
谢谢
2007-07-23 08:50 | jzhang

# re: [S60] ARM平台独有问题 Writable Static Data in DLLs

博主和我兴趣差不多啊 ..
做s60平台软件? 喜欢游戏? 正在研究Lua
2007-09-12 12:07 | makeup1984

# re: [S60] ARM平台独有问题 Writable Static Data in DLLs

runescape gold on sale

http://www.runescapeize.com/Runescape-Gold-GBP.html     
http://www.runescapeize.com/runescape-items2.html 

http://www.runescapegogo.com
http://www.runescapegogo.com/Runescape-gold-USD.html
2008-01-28 14:47 | sdad

# re: [S60] ARM平台独有问题 Writable Static Data in DLLs

http://www.runescapeize.com/Runescape-Gold-GBP.html     
http://www.runescapeize.com/runescape-items2.html 

http://www.runescapegogo.com
http://www.runescapegogo.com/Runescape-gold-USD.html
2008-01-31 15:16 | asdsd

# re: [S60] ARM平台独有问题 Writable Static Data in DLLs

S60的官方解释更是漏洞颇多,说增加可写的全局变量每一个DLL被引用的时候会增加4K内存使用,当DLL被很多程序引用的时候会消耗很多内存,所以就不让用了。你自己做DLL当然要注意,实际上用户的APP程序只有自己使用,凭什么不让用了?
2008-11-08 16:39 | sleepsaint

# re: [S60] ARM平台独有问题 Writable Static Data in DLLs

这个说法不对
DLL的空间都是逻辑空间,与实际内存的使用是无关的,许多端口设备也是映射到内存空间的
DLL在Windows平台也是多个程序公用的,这也是Windows平台Hook技术的基础,这个要是变了,那么许多程序都要改了
2008-12-12 22:27 | 白痴

# re: [S60] ARM平台独有问题 Writable Static Data in DLLs

Runescape Accounts
http://www.rs-game.com">http://www.rs-game.com

Runescape Powerleveling
http://www.runescape-power-leveling.com">http://www.runescape-power-leveling.com

Runescape Money
http://www.runescape-club.com">http://www.runescape-club.com

Runescape Gold
http://www.runescape-mall.com">http://www.runescape-mall.com

Runescape Items
http://www.salerunescapeitems.com">http://www.salerunescapeitems.com

Runescape Equipment
http://www.rsluck.com">http://www.rsluck.com

RS Accounts
http://www.rs-game.com">http://www.rs-game.com

RS Powerleveling
http://www.runescape-power-leveling.com">http://www.runescape-power-leveling.com

RS Money
http://www.runescape-club.com">http://www.runescape-club.com

RS Gold
http://www.runescape-mall.com">http://www.runescape-mall.com

RS Items
http://www.salerunescapeitems.com">http://www.salerunescapeitems.com

RS Equipment
http://www.rsluck.com">http://www.rsluck.com

runescape forum
http://forum.rs-game.com
2008-12-15 15:16 | nfl4sale

# re: [S60] ARM平台独有问题 Writable Static Data in DLLs

珠宝联盟网
http://www.zblmw.com">http://www.zblmw.com

珠宝
http://www.zblmw.com">http://www.zblmw.com

移动推拉门
http://www.yiliboli.com

全球贸易网
http://www.ecexp.com

荣华网络
http://www.ronghuaweb.com">http://www.ronghuaweb.com">http://www.ronghuaweb.com">http://www.ronghuaweb.com

SEO
http://www.ronghuaweb.com">http://www.ronghuaweb.com">http://www.ronghuaweb.com">http://www.ronghuaweb.com

搜索引擎优化
http://www.seoogle.cn">http://www.seoogle.cn

seo
http://www.seoogle.cn">http://www.seoogle.cn

莆田装饰
http://www.sanyue-china.com

莆田培训
http://www.ptbxpx.com

怀孕知识
http://www.mamabaike.com

童话
http://www.61tonghua.com">http://www.61tonghua.com

童话故事
http://www.61tonghua.com">http://www.61tonghua.com

肮脏美学
http://www.sickfox.com

肮脏美学
http://www.sickarts.com

莆田外贸
http://www.putiantrade.cn

贸易通
http://www.tradetalk.cn

莆田网络公司
http://www.ronghuaweb.com">http://www.ronghuaweb.com">http://www.ronghuaweb.com">http://www.ronghuaweb.com
2008-12-15 15:19 | nfl4sale

# re: [S60] ARM平台独有问题 Writable Static Data in DLLs

www.replicapulse.com
2009-01-08 02:27 | www.replicapulse.com

# re: [S60] ARM平台独有问题 Writable Static Data in DLLs

http://www.replicapulse.com">http://www.replicapulse.com">http://www.replicapulse.com">http://www.replicapulse.com">http://www.replicapulse.com">http://www.replicapulse.com">http://www.replicapulse.com">http://www.replicapulse.com
http://www.replicapulse.com">http://www.replicapulse.com">http://www.replicapulse.com">http://www.replicapulse.com">http://www.replicapulse.com">http://www.replicapulse.com">http://www.replicapulse.com">http://www.replicapulse.com
http://www.replicapulse.com">http://www.replicapulse.com">http://www.replicapulse.com">http://www.replicapulse.com">http://www.replicapulse.com">http://www.replicapulse.com">http://www.replicapulse.com">http://www.replicapulse.com
http://www.replicapulse.com">http://www.replicapulse.com">http://www.replicapulse.com">http://www.replicapulse.com">http://www.replicapulse.com">http://www.replicapulse.com">http://www.replicapulse.com">http://www.replicapulse.com
http://www.poshreplicas.com
2009-01-08 02:28 | www.replicapulse.com
标题  
姓名  
主页
验证码 *
内容   
  登录  使用高级评论  Top
[使用Ctrl+Enter键可以直接提交]