Visual Studio - C++ - 作为 32 位或 64 位构建和运行应用程序 - 从适当的 ProgramFiles 目录加载 DLL
Posted
技术标签:
【中文标题】Visual Studio - C++ - 作为 32 位或 64 位构建和运行应用程序 - 从适当的 ProgramFiles 目录加载 DLL【英文标题】:Visual Studio - C++ - build and run app as 32bit or 64bit - load DLL from appropripate ProgramFiles dir 【发布时间】:2017-10-03 08:08:29 【问题描述】:我将我的应用构建为 x86 或 x64。此应用程序使用外部 DLL。
我的 x64 系统 (Windows 10) 为两个平台 - x86 和 x64 安装了相同的 DLL 库。它们被放置在适当的 Program Files 目录内的相同文件夹中。我可以在环境变量 PATH 中手动将路径设置为任一路径,它就可以了。但是当我切换平台并想测试另一个时,重写PATH并重置计算机有点不方便。有什么解决方案,系统如何从正确的 Program Files 目录自动加载正确的 DLL?
【问题讨论】:
可能相关:Dynamic-Link Library Search Order. 【参考方案1】:我找到了从 Visual Studio 运行应用程序的解决方案:How do I set the path to a DLL file in Visual Studio?
它按预期工作。如果我运行 app outise Visual Studio,我自己设置了 PATH 变量并且也可以工作。
【讨论】:
您不需要设置 PATH,这是一项遗留技术,应该是最后的手段。如果您不想将 DLL 与可执行文件放在同一目录中,则程序本身应该知道如何找到它。 (我想在开发环境中设置 PATH 可能是一个有用的快捷方式。但发布版本不应该依赖它。)另见Don’t use global state to manage a local problem。【参考方案2】:将 DLL 复制到可执行文件旁边的构建位置,对于 Visual Studio,这通常是依赖于体系结构的子目录(即 x86 或 x64)中的 \Debug
或 \Release
。只需确保在项目设置中正确设置目标/输出位置即可。
您只需复制一次,或者更正确:每次“清理”解决方案后。为了使这更容易,许多人使用 dll 复制脚本(使用批处理、ruby 或 python)并让它在构建之前或清理之后自动运行。您可以在 Visual Studio 解决方案或项目设置中配置的预构建步骤或构建后步骤中执行脚本。
还有一种更强大的方法来处理构建工件和特性:我强烈建议使用CMake 来保持构建矩阵的有序性。它提供了一种通用的跨平台方法来编写预构建和构建后操作的脚本,例如跟踪依赖项、复制文件、打包安装程序、部署、版本验证、版本控制等。它带有一种简单的脚本语言,因此您可以构建宏和函数来进行复制。正确完成它可能需要一些学习曲线,但一旦到位,它就提供了一种强大而可靠的方式来构建您的项目构建管道。
【讨论】:
以上是关于Visual Studio - C++ - 作为 32 位或 64 位构建和运行应用程序 - 从适当的 ProgramFiles 目录加载 DLL的主要内容,如果未能解决你的问题,请参考以下文章
集成 Qt 框架、Netbeans IDE、Visual Studio C++ 编译器
在 Visual Studio (TDD) 中构建和运行 C++ 单元测试
Visual Studio - C++ - 作为 32 位或 64 位构建和运行应用程序 - 从适当的 ProgramFiles 目录加载 DLL