基於OpenCasCade的程式發布問題

來源:互聯網
上載者:User

基於OpenCasCade二次開發了一個程式,想採用簡單的copy的發布(部署)方式。

但在發布時遇到了很多問題。總結一下。

首先將所有所需的dll拷貝到了執行目錄下,然後將程式copy到一台未安裝OpenCasCade的機器上運行出錯,資訊如下:

即出錯資訊為:Runtime error! This application has requested the Runtime to terminate it in an unusual wya.

上網查了好久,所有的處理方法都不對路,極度鬱悶的思索中。首先報的不是dll未找到,說明不是dll未添加,那是什麼錯呢?抱著嘗試的態度,刪除了OpenCasCade添加的所有環境變數,驚喜的發現,本機上運行也出現上述錯誤。

初步認為是調用了某個未知的dll,一條一條的添加環境變數,結果大出所料,當添加環境變數set CASROOT=E:\OpenCASCADE6.1.0\ros時,無錯誤發生。反覆測試後確定,就是這個環境變數在作祟。並且,此環境變數的值對我的程式並不重要,只要存在就可以正常運行。

基於這些,判斷肯定是OpenCasCade的類庫中直接綁定了該環境變數,並在沒有發現該變數的時候莫名的拋出了這樣一個異常。

通過debug,將罪魁禍首定格在Visualization這個工程。仔細尋找發現了如下代碼:

 Aspect_Driver::Aspect_Driver () {

  OSD_Environment CSF_MDTVFontDirectory ;

  char *fontdir , *casroot ;
  fontdir =  getenv("CSF_MDTVFontDirectory" );
  if ( !fontdir) {
    casroot  = getenv("CASROOT");
    if ( casroot ) {
      TCollection_AsciiString CasRootString (casroot);
      CasRootString += "/src/FontMFT" ;
      CSF_MDTVFontDirectory = OSD_Environment(CasRootString.ToCString());
    } else {
      cout << " CASROOT or CSF_MDTVFontDirectory  are mandatory to use this fonctionnality " << endl;
      Standard_Failure::Raise ( "CSF_MDTVTexturesDirectory and CASROOT not setted " );
    }
  } else {
    CSF_MDTVFontDirectory = OSD_Environment("CSF_MDTVFontDirectory");
  }
  TCollection_AsciiString dir(CSF_MDTVFontDirectory.Value());

  dirMFTisDefined = (dir.Length() > 0);
  myUseMFT = Standard_True;
  myColorMapIsDefined = Standard_False;  
  myWidthMapIsDefined = Standard_False;  
  myTypeMapIsDefined  = Standard_False;  
  myFontMapIsDefined  = Standard_False;  
}

該代碼訪問了該環境變數,並且並沒做什麼實事,把casroot變數寫死,重新編譯通過。程式可以正常執行。

整個過程是個痛苦的經曆,提醒大家注意這個問題,類似的代碼不止出現在一個工程中,對我而言修改此處就可以正常工作了(雖然這樣修改不是什麼好習慣)。如果下次大家碰到類似問題,可以參考一下。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.