gpt4 book ai didi

c - 如何在 wine (Ubuntu) 上制作 Dev C++ 编译后自动启动

转载 作者:行者123 更新时间:2023-12-04 18:50:13 27 4
gpt4 key购买 nike

我想尝试一些仅在 Windows 中可用的 C 库,所以我安装了 wine 并安装了 dev C++。

enter image description here

与 Windows 不同的是,在我编译并运行后,它成功生成/编译为“exe”,但 cmd 没有出现。

enter image description here

我找到了一种通过启动终端并放置来运行 exe 的方法

$酒命令
$myc.exe
enter image description here

它可以工作,但手动启动“exe”需要时间。

如何让 dev c++ 在 wine 中自动查找 cmd 并执行编译后的代码?

先感谢您。

最佳答案

默认情况下,Dev-C++ 依赖于一个名为 ConsolePauser.exe 的简单文件。 .该文件调用编译后的.exe文件,并给出熟悉的 Process exited after 0.xxxxx seconds with return value x.退出后注意。
但是,ConsolePauser.exe是一个原生的 Windows 二进制文件,它不能在 Ubuntu 中执行,除非被 Wine 调用。此外,ConsolePauser调用可执行文件的裸名,而不是调用 Wine,这是必需的。
因此,您需要做什么才能使 Dev-C++ 运行 .exeF9 后自动生成文件是建立你自己的 ConsolePauser。这其实很简单:

#include <chrono>
#include <iostream>
#include <string>

int main(int agrc, char ** argv)
{
using namespace std;
string s = argv[1];
string s1;
for (const auto & ss : s)
{
if ((ss == ' ') || (ss == '\\')) s1.push_back('\\');
s1.push_back(ss);
}
s = "wine " + s1;
auto begin = chrono::high_resolution_clock::now();
auto retVal = system(s.c_str());
auto end = chrono::high_resolution_clock::now();

cout << "-------------------------------------" << endl;
cout << "Process completed after " << chrono::duration_cast<chrono::milliseconds>(end - begin).count();
cout << " milliseconds with return value " << retVal << "." << endl;
cout << "Press any key to continue. . ." << endl;

cin.get();

return 0;
}
它所做的只是解析参数,转义所需的字符,并将其传递给 Wine。这是一个快速而肮脏的版本,您可以通过检查 argc == 1 来开始改进它.
编译为 ConsolePauser.exe Ubuntu的编译器,把它放在你电脑的 PATH它应该可以工作。
然而,另一个问题存在。由于未知原因,Ubuntu 的可执行文件不会在单独的窗口中执行,如果由 Dev-C++ 之类的应用程序调用,与 Windows 不同。因此,你必须想办法把 ConsolePauser.exe到一个新窗口。
一个简单的方法是将文件重命名为 ConsolePauser1.exe , 并将此代码用于 ConsolePauser.exe :
#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 ";
command += string("\"") + "bash -c ";
command += string("\\\"") + "ConsolePauser1.exe ";
command += string("\\\\\\\"") + s;
command += string("\\\\\\\"");
command += string("\\\"");
command += string("\"");
system(command.c_str());
cerr << command << endl;

//Make sure that window lingers...
system("exec bash");
return 0;
}
将这两个文件放在 PATH 的同一个文件夹中,并且熟悉的旧控制台暂停器将像魅力一样工作。

关于c - 如何在 wine (Ubuntu) 上制作 Dev C++ 编译后自动启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59017995/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com