Bub*_*nja 8 qt containers docker kubernetes windows-subsystem-for-linux
我想从W10上运行的QT应用程序执行Linux二进制文件。在QT中,我们必须QProcess启动其他流程。但是,由于我的二进制文件是针对Linux的,因此我想到了两种可能的方法:
无论如何,QT应用程序应该启动进程(容器或bash),然后,该进程应启动我的二进制文件。
我一直在网上搜索,但找不到相关的内容,这使我觉得这很困难。出于这个原因,我发布问题是为了了解所提出方法的可行性。
已编辑
看起来WSL更容易,问题是用户必须安装它。通过apt-get安装新软件时,除了需要sudo密码外。
我必须执行的二进制文件仅在Linux中存在,并且可以说由于其复杂性而忽略了交叉编译。此外,此应用程序还需要CGAL,BOOST,MPI等软件。
如果您的Linux二进制文件取决于很多事情,我真的建议您将docker用于Windows。然后,您将有机会预构建自己的docker映像,该映像会将所有依赖项软件也放入您需要在其中运行的linux二进制文件。
当然,要让您的客户使用它,您应该将其放入dockerhub,为您自己注册一个帐户。
然后,解决方案很简单:让QT应用程序调用docker run以根据您自己的映像设置容器,执行该容器,然后让linux二进制文件将日志或其他日志写入linux容器和Windows之间的绑定挂载卷。运行后,QT应用程序从此共享文件夹获取linux二进制输出。
最后,我给出一个最小的可行示例供您参考:
假设Windows与linux容器之间的共享文件夹为:C:\\abc\\log_share,它将作为/tmp文件夹映射到linux容器。当然,你需要允许量份额右键单击docker icon在windows托盘区及选择设置,如描述在这里
将Windows应用程序简化为bat file,并将docker image 简化为ubuntu,您应该使用自己的预构建的docker image,其中包含所有依赖项:
win_app.bat:
ECHO OFF
::New a shared folder with linux container
RD /s/q C:\\abc\\log_share > NUL 2>&1
MKDIR C:\\abc\\log_share
::From windows call docker to execute linux command like 'echo'
echo "Start to run linux binary in docker container..."
docker run -it -v C:\\abc\\log_share:/tmp ubuntu:16.04 bash -c "echo 'helloworld' > /tmp/linux_log_here.txt"
::In windows, get the log from shared bind mount from linux
echo "Linux binary run finish, print the log generated by the container..."
type C:\\abc\\log_share\linux_log_here.txt
Run Code Online (Sandbox Code Playgroud)就像echo command在linux中一样简化linux二进制文件,输出的东西应该全部写入共享目录:
echo 'helloworld' > /tmp/linux_log_here.txt
Run Code Online (Sandbox Code Playgroud)现在,使用命令执行bat文件win_app.bat:
C:\abc>win_app.bat
C:\abc>ECHO OFF
"Start to run linux binary in docker container..."
"Linux binary run finish, print the log generated by the container..."
helloworld
Run Code Online (Sandbox Code Playgroud)
您可以看到Windows应用程序已经可以helloworld从docker容器中获取Linux二进制文件生成的内容(在此处)。
| 归档时间: |
|
| 查看次数: |
254 次 |
| 最近记录: |