‘壹’ .NET Frame work编译机制(二次编译)
C++和.Net程序采用了两种不同的编译方式。通常一个C++编写的程序,都是一次编译成二进制的代码,在相应的操作系统平台上直接执行即可。而.Net程序采用两次编译的方式,用C#,VB.Net等语言写成的程序被编译成IL代码,通过CLR在运行的时候JIT编译成为本地二进制代码。
MFC和WinForm很多设计上的不同从根本上说,都是因为编译模式带来的不同。因此,在仔细探讨MFC和WinForm之前,有必要细细体会一下不同编译方式带来的改变。
考虑一段代码,它需要在不同的编译环境下生成不同的代码,或者是为了减少代码编写量用一些替换方式取代类似的代码。在C++中利用预编译和宏来解决这些事情。MFC框架中,更是大量使用宏来进行核心功能的设计。但是宏只是一种巧妙的减少输入代码量的方式,本质上和手写输入一些代码并无区别(也许不够严密吧),它并不能在程序运行的时候动态支持代码的插入和改变,因为此时它已经编译完成了。而二次编译则不同,你可以将它的第一次编译看成是通常一次编译程序的预编译期,只是这个预编译更为的强大,它可以编译生成信息更为丰富的元数据。并且,只要在JIT执行前动态插入代码,利用反射等手段,就可以将已经编译好的程序的行为在某种程度上进行改变,其动态性能得到了本质上的改变。
因此,在MFC和WinForm中,我们可以看到两者在动态性能,安全性和效率方面都有很大的不同,总结一下,都可以归结到这不同的编译模式上来。在以后的日志中,都可以看到这些区别的
‘贰’ 关于程序二次编译,请教
并不是二次编译,而是把黑软的二进制代码作为资源放到黑软的可执行文件中。只需要在配置以后,把二进制代码释放出来,存成可执行文件,再把配置写进去也就好了。
‘叁’ .NET源代码执行前要经过两次编译,分别是哪两次
第一次编译使用.net Framework代码时,把代码编译为MSIL(即微软中间语言)这些代码不专用于任何操作系统,它是独立于机器,CPU和操作系统的.
第二次不同种类的编绎器,生成本地机器代码
‘肆’ C#的两次编译具体是怎么实现的
第一次编译使用.net Framework代码时,把代码编译为MSIL(即微软中间语言)这些代码不专用于任何操作系统,它是独立于机器,CPU和操作系统的.
第二次不同种类的编绎器,生成本地机器代码
‘伍’ 什么叫做二次编程
当要在以前的程序上扩展功能或者修改功能等的时候,在源代码拿来重新修改,编译,调试,运行。
‘陆’ C#求能够二次编译的反编译工具
Reflector,已经是完整版,因为是反射,所以不可能将IL展现为原有的C#,任何反编译工具其实用的都是反射,所以效果是一样的
‘柒’ 判断对错:asp.net采用“二次编译”的原理
感觉是这样的..每次第一次运行都很慢,然后就顺畅无阻了。
‘捌’ openwrt第二次编译需要多长时间
OpenWrt编译环境搭建和编译方法
一、 更新开发系统。
安装完ubuntu 后,重新开机的时候,会有一个VMware tools 安装的提示界面,耐心等待,等到VMware tools 安装好后
因为更新系统和安装一些工具包需要用到网络,所以进入ubuntu的界面后,
将ubuntu的网络设置为NAT网络连接模式(默认为NAT),
以上就绪后,更新开发系统的软件
1、首先备份Ubuntu 10.04源列表
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup (备份下当前的源列表) 2、修改更新源
sudo gedit /etc/apt/sources.list (打开Ubuntu 11.10源列表文件) 3、使用
http://hi..com/pobenliu/blog/item/2180dc3502933c375bb5f5a5.html
网站下的一个更新源贴到sources.list文件中(“#”开头的那一行为注释,可以直接复制进文件中) ,使用这里的源主要是为了提高下载速度,用官方的会比较慢。
4、通知ubuntu启用新的更新源
sudo apt-get update
二、 安装编译OpenWrt需要用到的软件包:
命令如下:
sudo apt-get install g++ libncurses5-dev zlib1g-dev bison flex unzip
autoconf gawk unzip make gettext gcc binutils patch asciidoc bzip2 libz-dev libc6-dev linux-headers-2.6.32-38
注意,红色部分的版本根据自己的内核版本来修改,可以通过uname –a 来查看。
三、 安装svn。
由于在后面需要用到svn 来下载OpenWrt,所以需要先安装svn。
由于使用命令 sudo apt-get install subversion来安装的版本最新也只是
1.6.6版本,为了和windows 上的版本同步,所以需要下载安装包,进行手工安装。
1、先下载两个包,
subversion-1.7.2.tar.gz
subversion-deps-1.6.1.tar.gz 2、拷贝到/home目录下,解压:
tar -zxvf subversion-1.7.2.tar.gz
tar -zxvf subversion-deps-1.6.1.tar.gz 3、进入目录,准备编译安装: cd subversion-1.7.2 执行:./configure
安装遇到的第一个error: checking for APR... no
configure: WARNING: APR not found
The Apache Portable Runtime (APR) library cannot be found. Please install APR on this system and supply the appropriate --with-apr option to 'configure' 解决办法: 到tar -zxvf subversion-deps-1.6.1.tar.gz 解压的目录下,有一个apr的文件夹,放到subversion-1.7.2下即可 cp -rf ../subversion-1.6.1/apr .
4、再重新执行./configure 命令 遇到第二个error:
checking APR version... 1.3.3
configure: Apache Portable Runtime Utility (APRUTIL) library configuration
checking for APR-util... no
configure: WARNING: APRUTIL not found
The Apache Portable Runtime Utility (APRUTIL) library cannot be found. Either install APRUTIL on this system and supply the appropriate 提示的是apache的端口没有找到,因为此安装并没有与apache结合,到tar -zxvf subversion-deps-1.6.1.tar.gz 解压的目录下,发现有一个 APR-util,再移动到ubversion-1.7.2下
5、重新执行./configure 命令 Ok,遇到第三个error,
checking sqlite library version (via pkg-config)... no
An appropriate version of sqlite could not be found. We recommmend 3.7.6.3, but require at least 3.6.18. 错误有提示:解决办法
sqlite-amalgamation-3071000.zip下载这个包,解压,将sqlite3.c放到指定的位置: unzip sqlite-amalgamation-3070900.zip
mkdir –p subversion-1.7.2/sqlite-amalgamation cd sqlite-amalgamation-3070900
cp sqlite3.c ../subversion-1.7.2/sqlite-amalgamation/
之后重新执行./configure 见到这表示./config执行ok
checking for ctypesgen.py... none configure: creating ./config.status config.status: creating Makefile
config.status: creating tools/backup/hot-backup.py
config.status: creating tools/hook-scripts/commit-access-control.pl config.status: creating
subversion/bindings/swig/perl/native/Makefile.PL
config.status: creating subversion/svn_private_config.h.tmp config.status: executing libtool commands
config.status: executing svn_private_config.h.tmp commands
6、然后编译安装: make clean
make && make install
只要没有遇到error,就是ok的, 输入
svn –version
得到:
svn, version 1.7.2 (r1207936) compiled Feb 8 2012, 23:09:00 说明安装成功。
四、下载OpenWrt源码。
分两种,一种是最新版但不是最稳定,也就是trunk版,一种是相对稳定版,backfire版。源码下载命令分别是: 先创建文件夹:
mkdir OpenWrt_trunk cd OpenWrt_trunk Trunk版下载命令:
svn co svn://svn.openwrt.org/openwrt/trunk/
若需要backfire:
mkdir OpenWrt_backfirecd OpenWrt_backfire
Backfire下载命令:
svn co svn://svn.openwrt.org/openwrt/branches/backfire/
五、 编译OpenWrt:
如果不是刚下载的代码,为了保持代码为最新状态,应该定期运行Svn up更新代码,什么时候有变你是不知道的 然后是更新软件包:
./scripts/feeds update –a ./scripts/feeds install –a
如果不更新软件包的话,你会发现后面是看不到很多软件包的,也就无法集成那些看不到的包了。
然后是make defconfig,再make menuconfig进入定制界面,定制自己的系统。
最后,执行make命令,然后是非常漫长的等待。
在编译的时候,是根据你的配置,进行下载程序包的,先是把这些程序包下载到./dl目录下,再进行解压编译,和安装。如果不是为了开发某一软件的话,建议一开始的时候不要安装太多的软件,一是时间太长,然后很容易出错。要用到的软件在编译好后,用opkg来安装。
‘玖’ java中.java文件只能编译一次吗未对.java源文件做任何修改情况下,不能再用javac命令进行二次编译
当然可以咯,这个编译次数没影响的,希望可以帮到你
‘拾’ 求助 关于scratch源码二次编译的问题
因为是用的别人项目源码,然后有他自己的makefile ,ide是eclipse for c++,指定用现成的makefile 能编过,如果自动生成makefile 会报很多错误,cmake 也需要自己写makelist.txt呀,现在需要在项目里添加文件,编译就会报不识别的错误。