【发布时间】:2023-03-21 03:14:02
【问题描述】:
这是在 Visual Studio 2017 (v141) 中构建的“Hello World”测试。我怀疑问题是一些 32 位/64 位不匹配,但我不知道如何检查。
我正在将以下内容编译为 Debug x86(它给出了一些我用 _SCL_SECURE_NO_WARNINGS 关闭的警告,但我认为它们不相关,我还执行了 #define _WIN32_WINNT 0x0501)。尝试编译为 x64 会抛出 TRK0005:无法找到:“CL.exe”。系统找不到指定的文件。
我正在链接到 libboost_XXX-vc141-mt-1_64.lib 库。
实际代码是
#include <iostream>
#include <boost/process.hpp>
#include <boost/process/windows.hpp>
namespace bp = boost::process;
int main(int argc, char * argv[])
{
int result = bp::system("echo Hello");
}
在内存位置 0x0137EE34 处引发“Microsoft C++ 异常:boost::process::process_error。”
【问题讨论】:
-
没有名为“echo.exe”的可执行文件。它是命令处理器的命令。比如dir、copy、if等。你可以用“cmd.exe /c echo Hello”来执行。
-
谢谢 - 我会在当前安装完成后立即尝试。如果我使用 std::system 而不是 bp::system 我的代码行确实有效。
-
当然,system() 函数不使用 CreateProcess(),它要求 Cmd.exe 完成这项工作。 Unix方式。我不清楚为什么 Boost 不使用 ShellExecuteEx(),这是一种以 Windows 为中心的方式来要求 shell 执行命令。哦,好吧。
-
Ping @KlemensMorgenstern 回答 Hans Passant 的问题
-
您是否尝试过处理异常以查看它的含义? (/cc @HansPassant 上一条消息)
标签: c++ visual-studio boost