‘壹’ Linux软件缺少动态链接库.so怎么办
几种办法
从别的相同版本的系统中把这个so文件到相同路径下就可以了
查看这个so文件属于哪个软件包,安装这个软件包
‘贰’ 缺少动态库的情况下,能通过编译吗
>> 如果你是链接动态库,在GCC后跟了一个-l参数,其后就是你所需库的名称,
>> 那么你不仅需要那个你所需的库文件,还需要你所需库的头文件才行,编译时需要头文件支持,
>> 链接时需要库文件,不管你是动态还是静态编译都是如此!!!!
头文件不是必须的。只要没有出现未声明的函数/变量的调用就可以。
>> 还需说明的一点是:只有用参数-o时才会有那个-satic的选项,
>> 也就是说只有在链接程序时才会有动态链接和静态链接之分!!!!!!
没有 -o 也可以 -static。-o 不代表链接
>> 动态链接库是为了减少可执行文件的大小,就是在一个系统中只提供一个库,
>> 可供多个动态链接的程序共同使用
同时也避免库代码被重复加载进入内存,减少系统内存占用
‘叁’ 易语言没Widows动态链接库怎么编译生成安装软件。
的意见作了一些修改。
什么是一个高效的软件?一个高效的软件不仅应该比实现同样功能的软件运行得更快,还应该消耗更少的系统资源。程序的时间效率是指运行速度,空间效率是指程序占用内存或者外存的状况。另外程序的效率我们也可以分为全局效率和局部效率。全局效率是指站在整个系统的角度上考虑的效率,局部效率是指站在模块或函数角度上考虑的效率。
1. 使用整数和长整数
提高代码运行速度最简单的方法莫过于使用正确的数据类型了。也许你不相信,但是正确地选择数据类型可以大幅度提升代码的性能。在大多数情况下,程序员可以将短整数型、小数型和双精度小数型的变量替换为整数(Integer)或长整数(Long)类型的变量,因为易语言处理整数和长整数的能力远远高于处理其它几种数据类型。
在大多数情况下,程序员选择使用小数型或双精度小数型的原因是因为它们能够保存小数。但是小数也可以保存在整数类型的变量中。例如程序中约定有三位小数,那么只需要将保存在整数型变量中的数值除以1000就可以得到结果。根据我的经验,使用整数和长整数替代短整数型、小数型和双精度小数型后,代码的运行速度可以提高将近10倍。 但是我们也不要老是强调使用使用整数和长整数,因为在程序中数据类型的定义还牵涉一个关键的问题,就是数据的安全,频繁而无规范地定义 数据类型会使算法出现漏洞,是数据的安全和临界判断有问题.对财务和工程计算而言,小数点的精度是很敏感的数据,只能用双精度数据来规范.另外, 换成整型也会导致程序可读性急剧下降.
2. 避免使用通用型数据
通用型的变量需要16个字节的空间来保存数据,而一个整数(Integer)只需要2个字节。通常使用通用型变量的目的是为了减少设计的工作量和代码量,也有的程序员图个省事而使用它。但是如果一个软件经过了严格设计和按照规范编码的话,完全可以避免使用变体类型。
3. 尽量避免使用属性
在平时的代码中,最常见的比较低效的代码就是在可以使用变量的情况下,反复使用属性(Property),尤其是在循环中。要知道存取变量的速度是存取属性的速度的20倍左右。下面这段代码是很多程序员在程序中会使用到的:
容器名: 数值 类型:整数型容器名: 容器 类型:整数型 计次循环首(7,容器) 文本1.内容 = 文本1.内容 + #换行符 + 到文本((数值×容器))计次循环尾()
下面这段代码的执行速度是上面代码的20倍。
容器名: 数值 类型:整数型容器名: 容器 类型:整数型容器名: 文本 类型:文本型
文本 = 文本1.内容 计次循环首(7,容器) 文本 = 文本 + #换行符 + 到文本((数值×容器))计次循环尾()文本1.内容 = 文本
另外要注意,这个涉及一个编程思路, 用属性当变量的作法大多数情况可以简化算法。所以有时候也不能一味强调用变量代替属性。
6. 避免调用很短的子程序
调用只有几行代码的子程序也是不经济的--调用子程序所花费的时间或许比执行子程序中的代码需要更长的时间。在这种情况下,你可以把子程序中的代码拷贝到原来调用子程序的地方。 但是有时候小的子程序可能会被调用很多次而不是只有两三次,这时就应该调用它。
7. 减少对子对象的引用
在易语言中,通过使用.来实现对象的引用。例如:
窗口1.编辑框1.内容
在上面的例子中,程序引用了两个对象:窗口1和编辑框1。利用这种方法引用效率很低。但遗憾的是,没有办法可以避免它。我的“多媒体模块”就有这个缺点。
8. 检查文本型数据是否为空
大多数易语言用户在检查文本型数据是否为空时会使用下面的方法:
如果 (文本1.内容 = "" ) 注释: 执行操作 结束如果
很不幸,进行字符串比较需要的处理量甚至比读取属性还要大。因此我建议大家使用下面的方法:
如果 (到数值(文本1.内容) = 0 ) 注释: 执行操作 结束如果
另一个不同的意见是:问题在于当文本字串为 "ABC"之类的非数值型时, 到数值("ABC")=0并不表示为空。文本比较的效率并不低,在底层算法中,一般会直接比较长度才会继续比较内容。
9. 使用数组,而不是多个变量
当你有多个保存类似数据的变量时,可以考虑将他们用一个数组代替。在易语言中,数组是最高效的数据结构之一。
10. 尽量使用动态数组,而不是静态数组
使用动态数组对代码的执行速度不会产生太大的影响,但是在某些情况下可以节约大量的资源。
11. 销毁对象
无论编写的是什么软件,程序员都需要考虑在用户决定终止软件运行后释放软件占用的内存空间。但遗憾的是很多用户对这一点好像并不是很在意。正确的做法是在退出程序前需要销毁程序中使用的对象。例如:关闭数据库:关闭(数据库名称)、全部关闭(),关闭打开(播放)的文件,关闭载入的图片等。 中止程序执行时应该要关闭打开的文件(包括数据库文件、图片文件等),但是窗口销毁对销毁窗口及窗口单元来说是自动的,已足够做释放用,在窗口内最好不要随意销毁窗口单元,可能会导致程序运行中的潜在的单元数据访问而崩溃.只有在图形buffer情况才需要经常销毁。
12. 尽量使用内部子程序,减少易模块的数量
因为从易语言连接到一个外部对象需要耗费大量的CPU处理能力。每当你调用接口函数的时候,都会浪费大量的系统资源。 另外只有在易模块中的接口函数或变量被调用时,易语言才将易模块加载到内存中;当易语言应用程序退出时,才会从内存中卸载这些模块。如果代码中只有一个模块,易语言就只会进行一次加载操作,这样代码的效率就得到了提高;反之如果代码中有多个模块,易语言会进行多次加载操作,代码的效率会降低。
13. 使用对象数组
当设计用户界面时,对于同样类型的控件,程序员应该尽量使用对象数组。你可以做一个实验:在窗口上添加100个图片框,每个图片框都有不同的名称,运行程序。然后创建一个新的工程,同样在窗口上添加100个图片框,不过这一次使用对象数组,运行程序,你可以注意到两个程序加载时间上的差别。 也有人认为两者从逻辑上看效率应该差不多。
14. 使用窗口单元“移动”方法
在改变对象的位置时,有些用户喜欢使用“宽度”、“高度”、“顶边”和“左边”属性。例如:
按钮1.宽度 = 100 按钮1.高度 = 100 按钮1.顶边 = 0 按钮1.左边 = 0
实际上这样做效率很低,因为程序修改了四个属性,而且每次修改之后,窗口都会被重绘。正确的做法是使用Move方法:
按钮1.移动(0,0,100,100)
15. 减少图片的使用
图片将占用大量内存,而且处理图片也需要占用很多CPU资源。在软件中,如果可能的话,可以考虑用背景色来替代图片--当然这只是从技术人员的角度出发看这个问题。 但是如果为了优化程序界面,使用图形换来的好处可能远胜节约下的资源,否则就不会有XP,也不会有游戏的进步了。
16. 编译优化
易语言的程序编译有三个选项:“编译”、“独立编译”、“编译生成安装软件”。优先使用的次序应该是“编译生成安装软件”、“编译”、“独立编译”,因为“独立编译”会将易语言系统中所有的支持库都编译进去,而“编译生成安装软件”只选择程序中必要的支持库编译。要脱离易语言环境也可以运行,就不要使用“编译”而应用“编译生成安装软件”或“独立编译”。 总结:执行效率和程序可读性永远是对矛盾 ,两者应该通盘考虑;资源占用和程序易用性永远是对矛盾,两者也应该通盘考虑。基于此,下面探讨一些提高程序的效率的规则。
不要一味地追求程序的效率,应当在满足正确性、可靠性、健壮性、可读性等质量因素的前提下,设法提高程序的效率。
以提高程序的全局效率为主,提高局部效率为辅。
在优化程序的效率时,应当先找出限制效率的“瓶颈”,不要在无关紧要之处优化。
先优化数据结构和算法,再优化执行代码。先考虑某功能是否可以用函数(命令)来实现,如果找不到这样的函数,再考虑用其他代码实现。
有时候时间效率和空间效率可能对立,此时应当分析那个更重要,作出适当的折衷。例如多花费一些内存来提高性能。
不要在什么时候都只追求紧凑的代码,因为紧凑的代码并不能产生高效的机器码。
‘肆’ 我弄到了msqehell.dll,也放到了C盘,可是还是提示缺少动态链接库,谁能解决下
在注册一下这个dll文件。
在开始——运行中输入regsvr32 msqehell.dll,如果不成功,就输入regsvr32 C:\WINDOWS\system32\msqehell.dll.
‘伍’ VS2010写个程序,在只装了系统的电脑上跑,发现缺少DLL。怎么办。动态连接库形式。
应该是在程序编辑、调试完成后,编译成exe文件时,有个选项,是可以控制,把涉及的DLL都包含进去,成为独立运行的程序,不依赖与电脑中是否安装了vs。你可以查一下。
‘陆’ 动态链接库(DLL)的作用是什么
动态链接库(DLLs)是从C语言函数库和Pascal库单元的概念发展而来的。所有的C语言标准库函数都存放在某一函数库中,同时用户也可以用LIB程序创建自己的函数库。在链接应用程序的过程中,链接器从库文件中拷贝程序调用的函数代码,并把这些函数代码添加到可执行文件中。这种方法同只把函数储存在已编译的.OBJ文件中相比更有利于代码的重用。
但随着Windows这样的多任务环境的出现,函数库的方法显得过于累赘。如果为了完成屏幕输出、消息处理、内存管理、对话框等操作,每个程序都不得不拥有自己的函数,那么Windows程序将变得非常庞大。Windows的发展要求允许同时运行的几个程序共享一组函数的单一拷贝。动态链接库就是在这种情况下出现的。动态链接库不用重复编译或链接,一旦装入内存,Dlls函数可以被系统中的任何正在运行的应用程序软件所使用,而不必再将DLLs函数的另一拷贝装入内存。
1.1. 动态链接库的工作原理
“动态链接”这几字指明了DLLs是如何工作的。对于常规的函数库,链接器从中拷贝它需要的所有库函数,并把确切的函数地址传送给调用这些函数的程序。而对于DLLs,函数储存在一个独立的动态链接库文件中。在创建Windows程序时,链接过程并不把DLLs文件链接到程序上。直到程序运行并调用一个DLLs中的函数时,该程序才要求这个函数的地址。此时Windows才在DLLs中寻找被调用函数,并把它的地址传送给调用程序。采用这种方法,DLLs达到了复用代码的极限。
动态链接库的另一个方便之处是对动态链接库中函数的修改可以自动传播到所有调用它的程序中,而不必对程序作任何改动或处理。
DLLs不仅提供了函数重用的机制,而且提供了数据共享的机制。任何应用程序都可以共享由装入内存的DLLs管理的内存资源块。只包含共享数据的DLLs称为资源文件。如Windows的字体文件等。
1.2. Windows系统的动态链接库
Windows本身就是由大量的动态链接库支持的。这包括Windows API函数 ( KRNLx86.EXE,USER.EXE,GDI.EXE,…),各种驱动程序文件,各种带有.Fon和.Fot 扩展名的字体资源文件等。Windows还提供了针对某一功能的专用DLLs,如进行DDE编程的ddeml.dll,进行程序安装的ver.dll等。
虽然在编写Windows程序时必然要涉及到DLLs,但利用Delphi ,用户在大部分时候并不会注意到这一点。这一方面是因为Delphi提供了丰富的函数使用户不必直接去使用Windows API;另一方面即使使用Windows API,由于Delphi把API函数和其它Windows DLLs函数重新组织到了几个库单元中,因而也不必使用特殊的调用格式。所以本章的重点放在编写和调用用户自定义的DLLs上。
使用传统的Windows编程方法来创建和使用一个DLLs是一件很令人头痛的事,正如传统的Windows编程方法本身就令人生畏一样。用户需要对定义文件、工程文件进行一系列的修改以适应创建和使用DLLs的需要。Delphi的出现,在这一方面,正如在其它许多方面所做的那样,减轻了开发者的负担。更令人兴奋的是Delphi利用DLLs 实现了窗体的重用机制。用户可以将自己设计好的窗体储存在一个DLLs中,在需要的时候可随时调用它。
‘柒’ 缺少动态链接库文件是什么意思
可能你误删了系统或某个软件的DLL文件,动态链接库文件就是DLL文件
‘捌’ 为什么我的电脑显示缺少动态链接库文件
这个是您的系统问题,是您的系统没有装好造成的,最准确的就是您重新换一个系统版本来装一下就好了,你也可以从别人机子上把这个文件复制下来到你的系统里试试。
‘玖’ 调用动态链接库,使用一下语句,编译发生如下错误:缺少类型说明符 - 假定为 int。注意: C++ 不支持默认in
第一,DLL文件位置错误不会导致编译出错。
第二,DLL文件路径里的斜杠方向反了,应该是"F:\\dll\\scenariodll.dll"
第三,你这个错误跟这段代码没有关系。错误原因是你某个函数的定义前面没加返回值类型。比如:
func()
{
}
上面这个函数定义就会导致C++不支持默认int的错误。要改成:
void func()
{
}
‘拾’ 提示:缺少动态链接库文件 msqehell.dll ,请教请教高人!
已发送。估计是因为你拷贝后没有注册。。
1,解压所下载的文件;
2,拷贝该DLL文件到系统system32文件夹里。【C:\windows\system32】
3,点击开始——运行,输入regsvr32 msqehell.dll,确定
4,之后,会有一个提示窗口,该文件已经成功安装。