2020年11月29日 星期日

解決「將 Dev-C++ 安裝在 Linux 中的 Wine 時,不能使用【編譯並執行】功能」之問題

這次用的 Dev-C++ 是裝在 Linux 中的 Wine,不過當下了【編輯並執行(Compile & Run)】命令時,郤沒出現應有的終端機畫面。查了一下,是 Dev-C++ 在 Wine 中執行時,有個執行編譯後執行檔的程式不能正確被 Dev-C++ 呼叫所致。
   找了網路解法,也不能直接解決,看來是查到的解法不適用我的環境,只好動手改一下。出問題的是位於「~/.wine/drive_c/Program Files (x86)/Dev-Cpp」目錄下的「ConsolePauser.exe」這個程式。

1. 將原程式 ConsolePauser.exe 更名

知道是哪個程式出問題,當然就不要用它了。但是為求謹慎,不要直接將該程式刪除,以更名的方式取代它。 
[SiB@X53SC ~]$ cd .wine/drive_c/Program\ Files\ \(x86\)/Dev-Cpp/
[SiB@X53SC Dev-Cpp]$ mv ConsolePauser.exe ConsolePauser.exe.org

2. 修改、編譯新的  ConsolePauser.exe

參考〔資料1〕的程式照著用,不能解決,略做修改如下: 
#include <iostream>
#include <string>
using namespace std;

int main(int argc, char ** argv)
{
    string s = argv[1];
    //Opens new window through gnome-terminal:
    //string command = "gnome-terminal -e ";    // Using GNOME Desktop
    string command = "mate-terminal -e ";        // Using MATE Desktop
    command += string("\"") + "bash -c ";
    command += string("\\\"") + "wine ";
    command += string("\\\\\\\"") + s;
    command += string("\\\\\\\"") + "; bash ";
    command += string("\\\"");
    command += string("\"");
    system(command.c_str());
    cerr << command << endl;

    //Make sure that window lingers...
    system("exec bash");
    return 0;
}
將之存在 Temp 目錄,檔名為 ConsolePauser.c。接著,用 g++ 編譯它。
[SiB@X53SC Temp]$ g++ ConsolePauser.c -o ConsolePauser.exe

3. 複製 ConsolePauser.exe

將新編譯的「ConsolePauser.exe」複製到「~/.wine/drive_c/Program Files (x86)/Dev-Cpp」目錄下,
[SiB@X53SC Temp]$ cp ConsolePauser.exe ~/.wine/drive_c/Program\ Files\ \(x86\)/Dev-Cpp/
此時新的「ConsolePauser.exe」就可以發揮作用。在 Dev-C++ 下使用【編譯並執行】或【執行】都可會自動跳出一個視窗,並在其中執行你寫的程式。

註:若用 Dev-C++ 編譯「ConsolePauser.c」,其檔案會較大,不適合。

已測試版本:

  • Fedora: 32
  • Wine 5.21
  • Dev-C++ 5.11

參考資料:

沒有留言:

張貼留言

感謝你耐心看完本文,歡迎留下任何指正、建議,筆者會儘快回應。(English is also welcome.)