『壹』 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,之後,會有一個提示窗口,該文件已經成功安裝。