【问题标题】:How to find programmatically location of a dynamic library file?如何以编程方式查找动态库文件的位置?
【发布时间】:2011-05-05 05:30:08
【问题描述】:

我想在系统中查找特定库的路径(如果有) 现在我有一个内置路径:

dllNameFrodo = "/usr/local/frodo/lib/libfrodo.dylib";

但当然是丑陋且不便携。

有什么想法吗?

【问题讨论】:

  • 他们可以在任何地方。这些系统中的每一个都有一些松散的约定,但一般无法找到它们。

标签: c++ windows linux macos


【解决方案1】:

与其尝试加载硬编码路径,不如将库与您的应用程序一起在本地打包,以便您知道它的安装位置,或者更好的是,让运行时加载器自动查找并加载它。这样用户就可以通过 LD_LIBRARY_PATH 和 LD_PRELOAD 来选择要加载的版本。

【讨论】:

    【解决方案2】:

    这就像搜索任何类型的文件 - 给定它的名称或扩展名以及从何处开始搜索的一些提示 - 因此,如果您想要以可移植的方式搜索,您有 2 个解决方案:

    1. 使用boost::filesystem
    2. 构建一些搜索功能,并使用平台特定功能在每个平台上实现一次。提示:这就是 boost::filesystem 的意义——在上面加糖——但如果你不想或不能使用 boost,那么它是唯一的“便携式”替代方案。

    【讨论】:

      【解决方案3】:

      在 Windows 上,您可以使用 FindFirstFile 和家人。

      这是一个非常特殊的要求 - 可移植的实现可能很难找到,并且在任何情况下都将使用平台特定的 API,如果它在所有方面都是最佳的。

      【讨论】:

        猜你喜欢
        • 2012-01-25
        • 2011-12-04
        • 2010-12-04
        • 1970-01-01
        • 2011-03-23
        • 1970-01-01
        • 2012-02-20
        • 2021-12-24
        相关资源
        最近更新 更多