如何编译程序以在 64 位机器上工作

Posted

技术标签:

【中文标题】如何编译程序以在 64 位机器上工作【英文标题】:How to compile a program to work on a 64 bit machine 【发布时间】:2011-10-13 18:08:27 【问题描述】:

我有一个在 Windows 2003 32 位机器上编译的 32 位应用程序。

当我尝试在 Windows Server 2008 或 Windows 7 上安装它时,我收到一条错误消息“无法启动应用程序 0xc0000142”

而且,我使用的是 Visual Studio 2008,我尝试设置 x64、x86 和混合平台的配置,但仍然没有成功。

如果我遗漏了任何明显的信息或需要更多信息,请告诉我。

它可以在 Server 2003 64 位上正常运行。

【问题讨论】:

嗯...32 位程序可以在 64 位上运行...所以这不能是(唯一)原因。 您是否在目标机器上安装了正确版本的 Visual C++ 运行时库? 程序使用的 DLL 之一的 DllMain() 函数返回 FALSE。你需要一个调试器。 它是否以非管理员帐户在 Server 2003 上运行?您可能违反了最小权限原则,UAC 正在追赶您(在 Vista、7、Win2k8、Win2k8R2 上) 尝试在跟踪模式下运行Dependency Walker - 这将向您准确显示加载失败的内容。 【参考方案1】:

我是链接vss_uid.lib、psapi.lib和traffic.lib,所有windows api库,编译的时候,就是把psapi.dll、vss.dll和traffic.dll打包到程序目录下。删除这些文件后,程序现在可以完美运行。

【讨论】:

以上是关于如何编译程序以在 64 位机器上工作的主要内容,如果未能解决你的问题,请参考以下文章

在 64 位机器上以 32 位运行 C# 应用程序

如何根据目标机器(32 位或 64 位)有条件地使用 WiX 安装文件?

错误:在 '.' 之前应为 `,' 或 `...'令牌

交叉编译:检查是不是可以在 64 位机器上构建 32 位

使用 MinGW C++ 编译 64 位静态库以在 Java (JNI) 中使用

64 位比较交换 (CAPS) 是不是应该在 32 位机器上工作? (或 64 位机器?)