静态链接的数据段共享问题。
— Begin quote from ____
引用第20楼东扬冬阳于2014-11-26 00:53发表的 回 19楼(燃烧吧-脂肪) 的帖子 :
静态链接的数据段共享问题。 http://www.cocoachina.com/bbs/job.php?action=topost&tid=163573&pid=1181933
— End quote
这个共享问题怎么解决了?请指导一下,谢谢
这个共享问题怎么解决了?请指导一下,谢谢
试试改成 动态链接的方式 链接BOX2D
或者替换下Box2D的两个文件。
我照着改的,只测试了windows下的,跑得通,没严格调试,明天再仔细看。
下载了的同学帮忙看下有没有问题。
— Begin quote from ____
引用第24楼东扬冬阳于2014-11-26 19:13发表的 :
或者替换下Box2D的两个文件。
我照着改的,只测试了windows下的,跑得通,没严格调试,明天再仔细看。
… http://www.cocoachina.com/bbs/job.php?action=topost&tid=163573&pid=1183006
— End quote
替换了这两个文件,没有出现宕机现象。改为动态链接还没试,早上起来再试试吧。
再次请教一下,为什么这里会出现静态链接数据段不一致的现象了?看上去没有fork一个子进程,或者创建一个新的现场。放在数据段的数据为什么会出现这种问题了?
— Begin quote from ____
引用第24楼东扬冬阳于2014-11-26 19:13发表的 :
或者替换下Box2D的两个文件。
我照着改的,只测试了windows下的,跑得通,没严格调试,明天再仔细看。
… http://www.cocoachina.com/bbs/job.php?action=topost&tid=163573&pid=1183006
— End quote
我也只测试了Windows下的,时能跑过的,同时看到s_blockSizeLookup的地址没有发生变化了。s_blockSizes得地址还是会有变化,但是在新地址中,数组中的内容和原地址中的内容还是一致的
数据段每份独立的二进制代码都有,全局变量、类的静态变量都放在数据段里头,估计这里是加载多次了,可能是另外的某个DLL和EXE都加载了一次。
— Begin quote from ____
引用第23楼东扬冬阳于2014-11-26 18:23发表的 回 21楼(燃烧吧-脂肪) 的帖子 :
试试改成 动态链接的方式 链接BOX2D http://www.cocoachina.com/bbs/job.php?action=topost&tid=163573&pid=1182970
— End quote
动态链接怎么改了?我做了尝试,都出错了,具体如下:
1,我修改 项目的 属性->配置属性->连接器->输入->附加依赖项,把libox2d.lib改为libox2d.dll。
错误:
3>libBox2d.dll : fatal error LNK1107: 文件无效或损坏: 无法在 0x2A8 处读取
2,修改 项目的 属性->配置属性->连接器->输入->附加依赖项,把libox2d.lib改为libox2d.dll;
修改libbox2d模块的 属性->配置属性->常规->配置类型, 由静态库(lib)改为动态库(dll)
错误:
2>libBox2d.dll : fatal error LNK1107: 文件无效或损坏: 无法在 0x2A8 处读取
3,修改 项目的 属性->配置属性->连接器->输入->附加依赖项,把libox2d.lib改为libox2d.dll;
修改libbox2d模块的 属性->配置属性->常规->配置类型, 由静态库(lib)改为动态库(dll)
修改libExtensions模块的 属性->配置属性->连接器->输入->附加依赖项,把libox2d.lib改为libox2d.dll;
错误:
6>LINK : fatal error LNK1104: 无法打开文件“libExtensions.lib”
= =
不好改,需要有导出函数才能生成lib文件。就照我那个写就行了。
— Begin quote from ____
引用第29楼东扬冬阳于2014-11-27 14:58发表的 回 28楼(燃烧吧-脂肪) 的帖子 :
= =
不好改,需要有导出函数才能生成lib文件。就照我那个写就行了。 http://www.cocoachina.com/bbs/job.php?action=topost&tid=163573&pid=1183805
— End quote
呃,这算不算是box2d的一个bug,或者cocos的一个bug了,对于引擎的使用者来说,遇到这类问题,查找root cause真的很头疼啊
我花了好长时间找是哪里导致了这个宕机,找到宕机原因后然后又花了很长时间研究为啥这个地址会被修改(虽然没有自己找出问题原因),想想都心碎啊:845::845::845:
不知道以后会不会修复这个?我用的是2.2.5版本
相信我,经过这次之后你的VC++调试技巧能有不少提升:882: