【问题标题】:{c++} programs send error 0xc00007b when run on a computer without visual studios proper dlls are in place{c++} 程序在没有 Visual Studio 的计算机上运行时发送错误 0xc00007b 正确的 dll 到位
【发布时间】:2016-07-26 22:07:09
【问题描述】:

我有这个程序:

#include <iostream>
#include <string>
using namespace std;

int main() {

    string inputfile = "input.pdf";
    string outputfile = "output.tiff";
    cout << "paste path of pdf to convert" << endl;
    getline(cin, inputfile);
    cout << "type the path of the output file with the correct extension        ie png jpeg or tif" << endl;
    getline(cin, outputfile);
    string command = "gm.exe montage -tile 1x10000 -geometry 85% -density 150x150 " + inputfile + " -quality 100 " + outputfile;

    system(command.c_str());
    return 0;
}

正如您所见,它使用 std 库。我没有使用安装项目,因为它觉得没有必要,因为 A 可以轻松地复制和粘贴应用程序和 dll。在我在副本中包含 dll 之前,它给了我以下错误消息:

MSVCP140d.dll 丢失,程序无法启动。

我从我的计算机上获得了 DLL 的副本,这似乎解决了问题,但是当我在非开发计算机上运行它时,它给了我:

ucrtbassed.dll 丢失,程序无法启动。

我从互联网上下载了丢失的 DLL,但现在当我启动程序时出现此错误:

应用程序无法正确启动(0xc0000007b}。单击“确定”关闭应用程序。

似乎当计算机安装了 Visual Studio 时,代码运行良好;但是,当他们没有安装 Visual Studio 时,它不会运行。我已经安装了 VCredist.exe 并且发生了同样的问题。

关于虾

【问题讨论】:

  • @πάντα-ῥεῖ 我的回答仍然与这里有关。您标记为重复的答案中没有包含正确的说明。看到这个:stackoverflow.com/a/38600728/1836540
  • 不确定这是否完全正确。这家伙通常是正确 DLL 的错误版本。
  • @slavanap 这不是问题。我不会投票重新开放,因为我们只是再次锁定它。 OP的代码与他的问题不符。在任何发布的代码中都不需要 Windows 10 系统 dll。并将一个复制到可能不是 Windows 10 的计算机上......当然,这会爆炸。可能该 DLL 正在调用另一个没有版本匹配希望的 DLL。 OP 立即声明他们不想构建安装程序来防止 DLL 地狱的这一方面。解决方案是,错误地引用 Obiwan Kenobi,“使用安装程序,Luke。”
  • @slavanap 你为什么生气??
  • @slavanap 我把自己放在剑上。对有问题的 DLL 进行了一些阅读。 vcredist 的世界在我不注意的时候发生了变化。我们一致认为,大多数问题将随着发布版本和正确 vcredist 的安装而消失。该死的几乎所有这些都应该随着静态静态链接而消失,但是Windows上的静态链接过去对我的待遇很差(并且可能是一个安全漏洞)。我不知道谁对你的回答投了反对票;它以前看起来是正确的,现在看起来仍然正确。

标签: c++ windows-runtime


【解决方案1】:
  1. 构建您的项目Release 版本。不是Debug.dll 名称末尾的符号d 表明您已经构建了调试版本。
  2. 静态链接所有库right clink on Project -&gt; Properties (-&gt; select Release configuration and All Platforms at top of the window) -&gt; C/C++ -&gt; Code Generation -&gt; set "Runtime Library" to "Multi-threaded (/MT)"
  3. 不要忘记转义传递给其他应用程序命令行的参数。我修复了您的代码的一行。查看文件名周围的附加引号。

    string command = (string)"gm.exe montage -tile 1x10000 -geometry 85% -density 150x150 " +
        "\"" + inputfile + "\" -quality 100 \"" + outputfile + "\"";
    

【讨论】:

  • 建议您确保安装正确的 vcredist 版本。确保安装与用于编译程序的 Visual Studio 相匹配的版本。
  • @user4581301 如果静态链接运行时库,则不需要可再发行包不需要
  • 感谢您提供的所有建议,我将尝试实施它并确保会发生
  • @TacticalShrimp 如果您对参与此网站非常感兴趣,请注意您的英语拼写和语法。
  • 好吧,对不起,我使用的是带有小按键的智能手机,而且我的视力有缺陷,所以很难看到我在这样的小设备上输入的内容。但我会尽量记住这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-03
  • 1970-01-01
相关资源
最近更新 更多