【问题标题】:C++ set dll search location [duplicate]C ++设置dll搜索位置[重复]
【发布时间】:2013-12-22 20:02:26
【问题描述】:

我目前正在使用 SDL 开发 C++ 应用程序,它需要 DLL 才能工作。现在,它只会在与程序相同的文件夹中找到 DLL。如何在名为“libs”的子目录中进行程序搜索。

【问题讨论】:

  • 为什么不做一个快捷方式?
  • 为什么不将DLL复制到C:\WINDOWS\system32
  • @KerrekSB,那么不妨把它复制到你的 PATH 中。
  • 如果我对这个 exe 文件进行分发,我希望它能够正常工作,它会在子文件夹中查找 dll。
  • @KerrekSB 因为系统拥有该目录,您应该不理会它。请不要建议任何人在那里写作

标签: c++ c++11 sdl


【解决方案1】:

如果您使用加载时链接,那么您需要将 DLL 定位在 DLL 搜索路径中。这记录在这里:Dynamic-Link Library Search Order。通常,这需要您将 DLL 文件夹添加到 PATH 环境变量。现在,将文件夹添加到PATH 环境变量是解决问题的重要方法。你肯定不想那样做。

另一方面,如果切换到运行时链接,则可以将 DLL 的完整路径传递给 LoadLibrary。可以调用GetModuleFileName找到可执行文件的文件名,然后拉出目录,加上\libs\MyDll.dll。但运行时链接的一大缺点是您需要为导入的每个函数使用GetProcAddress

这些选项都不是特别有吸引力。我的建议是更改您提出的设计。把可执行文件需要的所有DLL放到可执行文件的同一个目录中。

【讨论】:

    【解决方案2】:

    Environment Variables中添加dll文件夹路径(注意里面的路径用;隔开)。

    【讨论】:

    • 我希望这是一个通用设置,这样即使我分发了文件,程序仍然知道在哪里查找 dll。
    • @tVoss42 这将是一个通用设置,至少对于您的 PC 而言。
    猜你喜欢
    • 1970-01-01
    • 2016-04-20
    • 2018-06-29
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多