簡體   English   中英

R.NET 適用於 x86 但不適用於 x64

[英]R.NET works with x86 but not x64

我正在嘗試在 R.NET 的教程頁面上構建和運行 Hello World 示例。 當我強制程序以 x86 模式運行時,它似乎沒問題。 但是,當我在 x64 中運行時,它很早就停止了消息,“[程序] 以代碼 1073740791 退出”我已經在R 項目中安裝了最新版本的 R 並運行了故障排除步驟 我從故障排除程序中得到的 output 是:

  • 這個過程是 64 位的嗎? 真的
  • 信息:調用者提供 rPath=null,rHome=null 信息:R.NET 尋找預設的 R_HOME 環境。 變種找到 null
  • 信息:找到 Windows 注冊表項 RDotNet.NativeLibrary.WindowsRegistryKey
  • 信息:找到 Windows 注冊表項 RDotNet.NativeLibrary.WindowsRegistryKey
  • 信息:在 RDotNet.NativeLibrary.WindowsRegistryKey 下找到子鍵 InstallPath
  • 信息:RDotNet.NativeLibrary.WindowsRegistryKey 鍵的 InstallPath 值:C:\Program Files\R\R-4.0.3
  • 信息:R.NET 尋找特定於平台的方式(例如 win 注冊表)。 找到 C:\Program Files\R\R-4.0.3
  • 信息:R.NET 試圖根據 rHome 查找 rPath; 推導出 C:\Program Files\R\R-4.0.3\bin\x64
  • C:...\bin\x64\Debug\net5.0\ConsoleNet5R.exe(進程 33500)以代碼 -1073740791 退出。

我已經驗證有一個文件R.dll推斷它應該是“C:\Program Files\R\R-4.0.3\bin\x64”。 當我逐步使用我的反編譯器時,它似乎被 REngine.cs 中的第 400 行顯示在 function "Initialize" at this.GetFunction<setup_Rmainloop>()(); 它似乎沒有拋出異常,它只是停止。 老實說 - 我不確定這條線應該做什么......

有什么想法嗎? 如果必須,我可以在 x86 模式下運行,但如果可能的話,我想使用 x64。

這個問題已經報告了一段時間了。我對 R-4.0.3 到 R-4.0.5 也有同樣的經歷。

R-4.0.2 和以前的版本(4.0.1、4.0.0、3.6、3.5)沒有這樣的問題

我已經對此進行了分析並跟蹤了其中一個 RDotNet GitHub 問題( https://github.com/rdotnet/rdotnet/issues/139#issuecomment-898699993 )中的發現。

這似乎與 Windows 10 中啟用的控制流防護安全功能有關。這在 R 程序本身中不會發生,因為它們是使用與 Microsoft 不同的編譯器(gcc via mingw)編譯的。 However, the CFG feature is enabled for .NET binaries and there is something (sorry, I don't know the actual underlying root cause) in a change within R 4.0.3 in setjmp / longjmp calls that is causing the crash (see: https ://github.com/wch/r-source/blob/trunk/src/gnuwin32/fixed/h/psignal.h#L44-L51 )。

盡管您實際上會禁用安全功能,但我現在在編譯程序后修改程序時有一些運氣(您可以將其設置為構建后事件)。 您將需要運行類似: link /EDIT /GUARD:NO <yourapp>.exe ,它會禁用 CFG。

感謝https://github.com/dotnet/runtime/issues/11899#issuecomment-502195325提供了此解決方法所需的說明,以及https://www.trendmicro.com/en_us/research/1 -flow-guard-improvements-windows-10-anniversary-update.html提供了令人驚嘆的 CFG 分析,讓我們了解了正在發生的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM