更新ruby1.9.1中的rubyscript2exe.rb指令碼程式

來源:互聯網
上載者:User

   在ruby1.9中,如果用rubyscript2exe.rb 程式來運行,會報錯。 $0不可以被replace的,因為它是被frozen的。

   同時也因為在ruby1.9中,require 的時候,是直接將被包含的檔案名稱轉化成 絕對路徑載入的,也避免使用者多次載入相對路徑不一樣,但實際上絕對路徑是一樣的檔案。

 

   這些修改,從程式的可靠性和效率是有好處的。

 

   如果我們想使用打包的時候,一般都有兩個選擇,一個是rubyscript2exe.rb,一個是exerb。

 

   在ruby 1.8.7 中,發現都可以使用,並且一般來說exerb感覺還要快一點。

 

   但到了ruby1.9.1的時候,發現這兩個工具都不能使用了。必須要做相應的修改。

 

     exerb也是有上面的問題的,如果你探究了這兩者實現,感覺他們都是差不多方式。exerb裝起來還要更麻煩的,而rubyscript2exe就要簡單一些。

 

     從實現的方式來說,速度應該也差不多,都是把檔案從exe的資源section裡面提取出來,然後在臨時目錄上執行。 exerb是把如何加入到資源section的這一段都放到了源碼中,而rubyscript2exe 只是提供了exe檔案來實現這個功能。這個東西,其實瞭解了PE的檔案格式頭,應該都沒什麼難度的。   

    

     我一開始是從rubyscript2exe.rb開始,看看能否改動一下,可以使用到ruby1.9.1中,發現不行。並且它只是一個檔案,還不知道是怎麼回事來載入的。於是,有空的時候,下載exerb來研究,它的代碼多,它目前的1.4.8版本只有ruby1.9的,並且還不能用,鬱悶。
     沒辦法,因為之前自己用mingw/msys來編譯ruby1.9.1的代碼,所以只好用mingw來編譯這一塊,而不能用它提供的VC的模組。

       然後試著編譯1.9.1的模組,通過配置mak檔案,可以編譯通過。但將它用到exerb上會出現問題,說最後一個section不是.rsrc的。於是只好尋找ld的選項,加上了 -Wl,--gc-sections,--strip-all 就ok了。然後可以產生exe檔案,但運行報非法的win32程式,用PEEditor修複一下,可以運行了。

      有個問題,如果使用了#encoding :gbk的magic comment,會報找不到gbk.so,我看過了產生的exe中的資源段,已經包含了它。 但就是不對,看來還得仔細研究exerb的代碼了。

      由於時間緊,只好把這個任務暫時放一下。 於是,我又回到rubyscript2exe上來,通過仔細看它的代碼,已經在調試exerb中積累的經驗,很快就找到它裡面的竅門了。

      通過它的選項,將它自身的打包的tar檔案解壓,然後就可以看到它裡面的所有的代碼了。一下子就來精神了,因為知道也可以想研究exerb一樣來研究了。 並且它裡面的代碼更少, 於是現在它的包裡面,手工運行ruby init.rb test.rb,慢慢的修改了幾個參數,就可以順利打包成exe了。

     剩下的事情就很簡單的了,將修改只好的包檔案,用逆過程放到rubyscript2exe中,基本上可以使用了。 呵呵

     這也就是這篇blog的目的的。    

      修改之後的rubyscript2exe.rb 見這個連結: http://download.csdn.net/source/1199453         

 

     PS: 對於exerb的研究,等以後有了結果再貼出來     

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.