2015-02-06 48 views
0

我使用C++ Builder XE3构建了一个64位应用程序,该应用程序在Windows Server 2003(32位)上运行。我可以编译它,但当然不能在该计算机上运行它。C++ Builder XE3 64位应用程序始终需要rtl170.bpl

我将.exe复制到Windows 7(64位)计算机,现在抱怨找不到rtl170.bpl。我已经明确地将项目选项设置为不使用任何运行时软件包。

这是XE3中的错误,还是因为我在32位计算机上构建应用程序而失败?

回答

4

您还需要禁用“使用动态RTL”(链接器)。

+0

在64位模式下(无论如何XE5,不知道XE3)“使用动态RTL”复选框实际上没有影响; RTL链接由出现在Runtime Packages列表中的“rtl”控制。 – 2015-02-09 00:29:59

+0

是的,这是XE3中的设置。呃,exe文件的大小从2MB增加到12MB!还有另一个设置,“与Delphi运行时库(rtl包和cp32mt.lib/cp32mti.lib)链接”,但我不需要关闭 – 2015-02-09 08:47:09

0

您可以使用Dependency Walker来检查您构建的二进制文件(exe,dll等)的依赖关系。

这将精确显示依赖关系来自何处。一种可能性是您的代码依赖于其他库或DLL,而这又取决于rtl170

要检查的另一件事是,你实际上正在寻找正确的项目选项为你正在建设。例如,假设您正在执行Win64-Release,然后在Project Options中,确保当您在“运行时软件包”字段中时,“目标”组合框显示“发布配置 - 64位Windows平台”。 (在这个阶段,应该取消选中“与运行时软件包的链接”)。

在确认此设置以及您正在链接的任何相关库后,执行完整重建项目。 (例如 - 如果您还构建了OpenSSL并链接到该链接,请确保已针对OpenSSL的构建关闭了“与运行时包关联”)。

相关问题