工作学习笔记——.Net 4.0安装失败、RealView编译器生成的程序小的不正常

今天碰到两个比较奇怪的问题,寻找答案的过程比较有意思。

1. .Net 4.0安装失败

 

Installation Log报告的消息是,“Final Result: Installation failed with error code: (0x80070643), "安装时发生严重错误 "”

其中错误代码0x80070643网上说表示安装过程中遇到一般性错误。信息不够,继续看Installation failed. Msi Log,这个Log文件很大,有几M,不好直接看。在Log中搜索error,除了"SchedSecureObjectsRollback: Failed to store ACL rollback information with error 0x80070424"之外也没有找到什么有用信息。正一筹莫展之际,搜到了这篇文章

 

How to locate the cause of error code 1603 in a verbose MSI log file

其中提到在Msi.Log中搜索错误的常用方法是搜"return value 3",还提到如果是在非英文windows系统上,这个搜索并不起作用。顺着这个提示,我在Log文件中搜索"返回值 3"(搜中文"错误"也是可以的),果然找到了有用的信息:

 

“错误 1406。
无法将数值 PresentationHost.exe 写入键 
/SOFTWARE/Microsoft/Internet Explorer/Main/FeatureControl/FEATURE_ZONE_ELEVATION。 
系统错误 。 请验证您对该键拥有足够的访问权限,或者与您的技术支持人员联系。”
用regedit给/SOFTWARE/Microsoft/Internet Explorer/Main/FeatureControl加上权限再安装就好了。
加权限第一次没有成功。后来参考了一篇文章
解决“请验证您对该键拥有足够的访问权限,或者与您的技术支持人员联系
指出的给Users用户加权限的方式就ok了。

至于为何只有个别机器在安装.Net 4.0过程中出现这种问题,就不得而知了(可能是这些机器安装了某些安全软件,提高了系统的安全级别)。

2.RealView编译器生成了只有8个字节大小的mod

一个程序,用GCC编译一百多K,用RealView编译链接后生成mod只有8个字节。看编译过程,没有明显的警告和错误提示。

一步一步往前推,使用objdump命令查看链接生成的elf文件,发现ER_RO段(只读代码段)的数据就非常少。联想到RealView编译器有自动去掉未使用函数的功能,查看了程序的入口函数所在的目标文件。果然入口函数的目标代码也少的出奇。这时再仔细检查编译过程,发现编译入口函数所在的文件时,并不是编译的期望的文件,而是另外一个同名文件。而这个同名文件的入口函数直接就用return返回了。RealView发现不会用到工程中的其它函数,生成的elf文件里就只有这条返回指令了。GCC没有这个功能,仍然把工程中的所有函数都编译到目标文件中了。当然因为这时入口函数是错误的,这个GCC生成的mod应该是无法运行的。只不过mod要上手机才能运行,搜寻问题的过程没有从这条路上走。

 

 

 

你可能感兴趣的:(.net,工作,windows,gcc,编译器,联想)