① 怎样静态编译C++程序
在 C++ 中动态联编需要虚函数的支持,这是因为虚函数的工作原理决定的,而正是因为使用了虚函数来实现动态联编,也让动态联编的效率略低于静态联编。通常,编译器处理虚函数的方法是: 给每个对象添加一个隐藏成员,隐藏成员保存了一个指向函数地址数组的指针 ,这个数组就是虚函数表(virtual function table, vtbl)。虚函数表中存储了为类对象进行声明的虚函数的地址,调用虚函数时,程序将查看存储在对象中的 vtbl 地址,然后转向相应的函数地址表,如果使用类声明中定义的第一个虚函数,则程序将使用数组中的第一个函数地址,并执行具有该地址的函数。
虚函数这个概念是 C++ 的精华之一,遇到虚函数时要注意以下几点:
1.定义一个函数为虚函数,不代表函数为不被实现的函数(可以有自己的实现)
2.定义它为虚函数是为了允许用基类的指针来调用子类的这个函数(提供了基类调用子类函数的方式)
3.定义一个函数为纯虚函数,代表函数没有被实现(声明后面接=0,例如:virtual func() = 0 此时派生类必须要实现此虚函数)
4.具有纯虚函数的类是抽象类,不能用于生成对象(即不能实例化),只能派生,它派生的类如果没有实现纯虚函数,那么他的派生类还是抽象类。虚析构函数
虚析构函数顾名思义就是将析构函数定义为虚函数。如果我们在派生中分配了内存空间,但是基类的析构函数不是虚析构函数,就会发生内存泄漏。看下面的例子:
#include <iostream>using namespace std;class Base{public:
virtual void print(){
cout << "This is Base's print function" << endl;
}
/* 对比加与不加 virtual 析构函数的调用情况 */
~Base(){
// virtual ~Base(){
cout << "The destructor of Base" << endl;
}
};
class Derived : public Base{public:
void print(){
cout << "This is Derived's print function" << endl;
}
~Derived(){
cout << "The destructor of Derived" << endl;
}
};
int main(){
Base *p =
new Derived();
p->print();
delete p;
return 0;
}
不加 virtual 的运行结果:
加上 virtual 的运行结果:
在上面程序示加上 virtual 时编译器还是按照 Base 类型调用了析构函数,没有执行 Derived 类的虚析构函数,就造成了内存泄露。修改 Base 类的析构函数为虚析构函数后实现了多态,就可以确保执行正确的析构函数,完成资源的释放
② eclipse颜色设置
刚刚安装Eclipse,结果背景色是白色的.个人比较喜欢背景色暗一点的,最好的全黑的,就上网网络了一下如何调颜色的问题.
第一种:我们可以直接换背景色以及其他颜色(譬如:注释,关键字等)
window->Preferences 搜索 color->java->Editor->Syntax Coloring->java 然后就可以下面进行颜色的变换了.(有一点不好的是,换完之后好多颜色都不协调,还要换好多.而且再往回去换,要很麻烦,所以新手还是不建议自己换)
第二种: 使用着色器
1 找到eclipse左上角的Help
2 help->Eclipse Marketplace->find中搜索"Theme"
3 搜索完成后 找到 "Eclipse Color Theme" 点击Install
4 在弹出的对话框中,点击“Next”,接下来选择“I accept the terms of the license agreement”,然后点击“Finish”等待安装
5 .安装过程Eclipse会弹出安全警告“Security Warning”,直接点击“OK”继续
6.在安装完后Eclipse会弹出重启软件提示“Software Updates”,直接点击“Yes”重启Eclipse
7.当Eclipse重启完成后,就可以使用着色插件(Eclipse Color Theme)了
如何使用
window->Preferences 搜索 color theme 选择自己喜欢的->Apply->ok,就行了
(
Eclipse Marketplace是个插件应用商店,很实用的一个功能。
打开 eclipse,help--Eclipse Marketplace Client就能找到
有的eclipse中没有这个功能就需手动添加Eclipse Marketplace Client。
help--install new software
地址栏输入:http://download.eclipse.org/mpc/indigo/ (这里使用Eclipse indigo版本,根据你的Eclipse版本替换URL中的indigo字符串,Eclipse中各个版本的名称见下面)
输入回车后,选择General Purpose Tools - Marketplace Client, 然后一路Next或Agree
下载完成后,重启eclipse,选择help--Eclipse Marketplace Client,就可以搜索插件下载安装了。
③ 易语言静态编译和独立编译的区别
1、库文件和程序文件不同,编译是把支持库文件和程序分开来,如果给别人去用,别人却没安装易语言,就要把支持库文件带上给那人才能用。但是静态编译是把支持库文件打包到程序里去.这样,如果对方没装易语言也照样可以正常使用和独立编译。
④ 易语言编译有三种,有什么区别
E语言编译反三种:普通编译、静态编译、编译成安装软件。普通编译:有时候会出现提示是否将文件写出到同一目录下。静态编译:直接编译成EXE可执行文件。编译成安装软件:直接编译成一个可安装的软件。
⑤ codeblocks+mingw怎么实现静态编译
你在设置->编译器与调试器->连接器设置->其他链接器选项 里面加:-static
这样因该最直接。
你是不是出现丢失libgcc_s_dw2-1.dll
这个出现在用g++ 编译C的情况,如果你只用到那个C,而不用C++的话可以修改工具链可执行文件中动态链接器:把mingw32-g++.exe改为mingw32-gcc.exe,连接器就不用加-static了。
如果把动态链接器改为mingw32-gcc.exe 编译C++的时候你就要在链接器选项里加
-lstdc++ -static两个选项了。
总之:如果你只用C++的话,应该不会出现这个问题。
只用C的话,建议你修改工具链可执行文件中动态链接器:把mingw32-g++.exe改为mingw32-gcc.exe
⑥ 静态联编和静态编译
联编就是将模块或者函数合并在一起生成可执行代码的处理过程,同时对每个模块或者函数调用分配内存地址,并且对外部访问也分配正确的内存地址,它是计算机程序彼此关联的过程。按照联编所进行的阶段不同,可分为两种不同的联编方法:静态联编和动态联编。
静态联编是指在编译阶段就将函数实现和函数调用关联起来,因此静态联编也叫早绑定,在编译阶段就必须了解所有的函数或模块执行所需要检测的信息,它对函数的选择是基于指向对象的指针(或者引用)的类型,C语言中,所有的联编都是静态联编,据我所知道的,任何一种编译器都支持静态联编(废话)。
动态联编是指在程序执行的时候才将函数实现和函数调用关联,因此也叫运行时绑定或者晚绑定,动态联编对函数的选择不是基于指针或者引用,而是基于对象类型,不同的对象类型将做出不同的编译结果。C++中一般情况下联编也是静态联编,但是一旦涉及到多态和虚拟函数就必须要使用动态联编了。下面将介绍一下多态。
多态:字面的含义是具有多种形式或形态。C++多态有两种形式,动态多态和静态多态;动态多态是指一般的多态,是通过类继承和虚函数机制实现的多态;静态多态是通过模板来实现,因为这种多态实在编译时而非运行时,所以称为静态多态。
什么是静态编译
静态编译,就是编译器在编译可执行文件的时候,将可执行文件需要调用的对应动态链接库(.so)中的部分提取出来,链接到可执行文件中去,使可执行文件在运行的时候不依赖于动态链接库。
编辑本段静态编译与动态编译的区别
动态编译的可执行文件需要附带一个的动态链接库,在执行时,需要调用其对应动态链接库中的命令。所以其优点一方面是缩小了执行文件本身的体积,另一方面是加快了编译速度,节省了系统资源。缺点一是哪怕是很简单的程序,只用到了链接库中的一两条命令,也需要附带一个相对庞大的链接库;二是如果其他计算机上没有安装对应的运行库,则用动态编译的可执行文件就不能运行。
静态编译就是编译器在编译可执行文件的时候,将可执行文件需要调用的对应动态链接库(.so)中的部分提取出来,链接到可执行文件中去,使可执行文件在运行的时候不依赖于动态链接库。所以其优缺点与动态编译的可执行文件正好互补。
⑦ 易语言编译器中的 (静态编译) 有什么作用
用静态编译它会把支持库文件和EXE程序一起打包,编译出来的EXE程序可以在没有装易语言的电脑中运行。如果不是静态编译他会把支持库文件和EXE分离开,如果失去支持文件EXE程序就无法在没有装易语言的电脑中运行。
⑧ 易语言静态配置编译器是干什么的
易语言没有自己的编译器,但他用的是VC的编译器。
非静态编译:
易语言因为没有自己的静态编译器,如果不使用别人的编译器,你编译出去的软件,将会把你软件用到的函数和命令所属的支持库,DLL等...都编译进软件 或 软件同目录,即使你不是用到库的全部命令,也会被把所有用到命令的很多支持库,整库编译进去,这样导致了软件体积巨大,还会影响软件效率。。
静态编译:
易语言因没有自己的静态编译器,所以用的是VC的编译器。使用静态编译的好处就是,当你调用了很多库里面的命令时候,不需要把这么多库都带上编译出去。静态编译可以让他从库中脱离出来,只编译被调用到的命令部分。这样减轻了软件的体积负担 和 运行效率。。。
现在明白了吧!呵呵!记得采纳哦!!
⑨ 动态编译和静态编译有何主要区别
静态编译与动态编译的区别
1、动态编译的可执行文件需要附带一个的动态链接库,在执行时,需要调用其对应动态链接库中的命令。所以其优点一方面是缩小了执行文件本身的体积,另一方面是加快了编译速度,节省了系统资源。缺点一是哪怕是很简单的程序,只用到了链接库中的一两条命令,也需要附带一个相对庞大的链接库;二是如果其他计算机上没有安装对应的运行库,则用动态编译的可执行文件就不能运行。
2、静态编译就是编译器在编译可执行文件的时候,将可执行文件需要调用的对应动态链接库(.so)中的部分提取出来,链接到可执行文件中去,使可执行文件在运行的时候不依赖于动态链接库。所以其优缺点与动态编译的可执行文件正好互补。
⑩ 易语言的静态编译是什么意思
1、编译是把支持库文件和程序分开来,如果给别人去用,别人却没安装易语言,就要把支持库文件带上给那人才能用.
2、静态编译就是把支持库文件打包到程序里去.这样,如果对方没装易语言也照样可以正常使用和独立编译.
3、在易语言中,想把一个易语言源码程序变成一个可执行的EXE软件程序,有三种编译方式:
一、编译。
这种方式只是把源码变成EXE文件,不把所用到的支持库一起打包进程序中。
优点是程序体积小,可以有效地减少某些杀毒软件的误报;
缺点是只可以在装有易语言的机器上使用,在没有易语言的电脑上会说缺少支持库。
二、独立编译。
在易语言4.X版中,可以把支持库写到EXE程序中,方便在没有易语言的电脑上使用。
缺点是程序体积大,容易误报。在易语言5.X版中,独立编译改为静态编译,不再把支持库整个地打包到程序中,而把用到的命令打包,所以体积有所减小,也减少了误报。
但是静态编译需要使用外部的链接器,如果设置不好,则无法编译。
三、编译成安装文件。
这种方式的编译,可以直接生成安装文件,方便在其他电脑中进行软件的安装。
缺点是不小心就会把源码也打包进去。