歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux基礎知識

Wine安裝Windows軟件的錯誤以及處理

 1、安裝rtx軟件
 
  1)安裝時,後台會報一些錯誤:如找不到mfc42u.dll之類的,可以從Windows/system32目錄拷貝到wine的相應目錄。
 
  2)如果是自動構建的wine,則有可能出現 libxml2 support was not present at compile time 的問題,這時需要安裝 libXML2-dev 包。
 
  2、安裝一些帶輸入檢測的軟件如招商證券,會出現包含類似 X11DRV_SetDIBits+0x1f2() in winex11 的錯誤,這時需要打補丁。打補丁的方法是:
 
  1)下載wine源代碼
 
  2)按照以下內容修改文件 wine/dlls/winex11.drv/dib.c b/dlls/winex11.drv/dib.c:
 
  
 Skipped content of type multipart/alternative-------------- next part --------------
diff --git a/dlls/winex11.drv/dib.c b/dlls/winex11.drv/dib.c
index cec2058..809897e 100644
--- a/dlls/winex11.drv/dib.c
+++ b/dlls/winex11.drv/dib.c
@@ -3861,6 +3861,7 @@ INT X11DRV_SetDIBits( X11DRV_PDEVICE *ph
X11DRV_DIB_IMAGEBITS_DESCR descr;
BITMAP bitmap;
LONG width, height, tmpheight;
+ int nrsrcbytes, dibpitch;
INT result;

descr.physDev = physDev;
@@ -3880,6 +3881,16 @@ INT X11DRV_SetDIBits( X11DRV_PDEVICE *ph

if (startscan + lines > height) lines = height - startscan;

+ /* pointer check */
+ dibpitch = ((width * descr.infoBpp + 31) &~31) / 8;
+ if( descr.compression)
+ nrsrcbytes = 1;
+ else {
+ nrsrcbytes = lines * dibpitch;
+ if( nrsrcbytes < 0) nrsrcbytes = - nrsrcbytes;
+ }
+ if( IsBadReadPtr( bits, nrsrcbytes)) return 0;
+
switch (descr.infoBpp)
{
case 1:
@@ -3926,7 +3937,7 @@ INT X11DRV_SetDIBits( X11DRV_PDEVICE *ph
descr.width = bitmap.bmWidth;
descr.height = lines;
descr.useShm = FALSE;
- descr.dibpitch = ((descr.infoWidth * descr.infoBpp + 31) &~31) / 8;
+ descr.dibpitch = dibpitch;
X11DRV_DIB_Lock( physBitmap, DIB_Status_GdiMod, FALSE );
result = X11DRV_DIB_SetImageBits( &descr );
X11DRV_DIB_Unlock( physBitmap, TRUE );

 
  左邊有-號的,刪除這一行,左邊有+號的,添加這一行。
 
  修改後編譯,如果使用debian系統,則可以用以下命令編譯:
 
  
 cd wine
sudo debian/rules clean
sudo debian/rules build
sudo debian/rules binary

 
  3、出現斷言失敗錯誤:
 
  text.c: usr32 pellip->under == 0 && pellip->after == 0
 
  時,有可能是亂碼導致,配置wine支持中文即可。
Copyright © Linux教程網 All Rights Reserved