用于命令行的 Qt Creator 标准输入,可部署到远程 Linux 主机
Posted
技术标签:
【中文标题】用于命令行的 Qt Creator 标准输入,可部署到远程 Linux 主机【英文标题】:Qt Creator stdin for command line with Deploy to Remote Linux Host 【发布时间】:2012-08-05 20:15:41 【问题描述】:我正在使用 Qt Creator 的远程部署功能在嵌入式 Linux 目标板上启动我的简单命令行应用程序。我的测试应用程序非常简单,并要求用户打印他/她的名字。它交叉编译、传输到开发板并启动,Qt Creator 底部附近的“应用程序输出”窗口显示“输入您的姓名:”提示,但我无法在任何地方输入并为通过 Qt Creator 远程运行的应用程序提供标准输入。
如何在 Qt Creator 中完成此任务?我可以以某种方式操纵部署“参数”来连接设备以向我的命令行应用程序提供标准输入吗?我也无法通过选中“项目”>“运行配置”下的“在终端中运行”复选框来远程启动应用程序,因为它不可用于远程部署。
代码:
#include <iostream>
using namespace std;
int main()
cout << "Enter a number: ";
int nb;
cin>>nb;
cout << "Here is your number:" << nb << endl;
return 0;
Qt Creator 中的应用程序输出:
Killing remote process(es)...
Starting remote process ...
Remote process started.
Enter a number: d
【问题讨论】:
【参考方案1】:我发现无法在 IDE 中为 qt creator 启动的应用程序提供标准输入。
我确实尝试了一些东西,看起来命名管道工作得很好。幸运的是,它包含在 Busybox 中,所以它在我的板上。
要使用它,您可以使用“运行设置”下的“设备上的备用可执行文件”选项从 Qt Creator 远程启动应用程序 并将命名管道的最后一行传输到需要标准输入的 c++ 程序。因此,您的“设备上的备用可执行文件如下所示:
cd /home/test; tail -f mypipe | ./test3 –qws
‘test3’是我的程序,/home/test 是可执行文件的位置。
然后打开 1 个额外的 ubuntu 终端并通过 SSH 连接到开发板。现在创建一个名为“mypipe”的命名管道:
mkfifo mypipe
当您的程序期望标准输入启动并等待输入时,您可以回显该输入 其他终端进入命名管道,您的程序会将其作为标准输入:
echo ‘2’ > mypipe
【讨论】:
【参考方案2】:Debug > Start Debug 子菜单中有更多选项。您还需要一个:附加到正在运行的调试服务器。它确实打开了这个整洁的小窗口:
如您所见,有很多参数,甚至是“在终端中运行”选项,但由于某种原因它在我的机器上不起作用。不要忘记正确设置可执行二进制文件和套件设备设置的本地路径。我还建议您在 Environment > Keyboard 设置中为AttachToRemoteServer
命令绑定热键。
之后,您唯一需要做的就是在远程设备上运行gdbserver
:
gdbserver :<port> <executable>
正在运行的进程确实有一个正确的stdin
和stdout
流,您可以通过 SSH 会话在终端中与您的应用程序进行交互。
【讨论】:
以上是关于用于命令行的 Qt Creator 标准输入,可部署到远程 Linux 主机的主要内容,如果未能解决你的问题,请参考以下文章