首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CMake的find_library search LD_LIBRARY_PATH吗?

CMake的find_library search LD_LIBRARY_PATH吗?
EN

Stack Overflow用户
提问于 2017-01-10 10:12:29
回答 3查看 2.5K关注 0票数 3

尽管阅读了这些文档,但我还是不知道CMake的命令find_library是否搜索了LD_LIBRARY_PATH中列出的目录。

我的测试结果好坏参半。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-01-10 11:22:46

从文档中(我没有复制与cmake变量或find_library参数(此处不相关)相关的文本):

如果指定了NO_DEFAULT_PATH,则不会向搜索添加其他路径。如果未指定NO_DEFAULT_PATH,则搜索过程如下: ..。

  1. 搜索标准系统环境变量。如果NO_SYSTEM_ENVIRONMENT_PATH是一个参数,则可以跳过这一点。
    • LIB中的目录。在Windows上:<prefix>/lib/<arch> if CMAKE_LIBRARY_ARCHITECTURE被设置,<prefix>/lib用于PATH中的每个<prefix>/[s]bin<entry>/lib用于PATH中的其他条目,以及PATH本身中的目录。

..。

因此,LD_LIBRARY_PATH不为find_library所用。这是确认的阅读源代码

测试的混合结果可能来自其他变量,但如果没有对这些测试的详细描述,这只是猜测。

票数 3
EN

Stack Overflow用户

发布于 2017-01-10 12:15:38

根据当前的文档和一个小测试,似乎没有考虑LD_LIBRARY_PATH

find_library的文档显示

如果指定了NO_DEFAULT_PATH,则不会向搜索添加其他路径。如果未指定NO_DEFAULT_PATH,则搜索过程如下:

  1. 在特定于cmake的缓存变量中指定的搜索路径。这些将用于在命令行中使用-DVAR=value。如果传递NO_CMAKE_PATH,则可以跳过此操作。
    • 如果设置了<prefix>/lib/<arch>,则为CMAKE_LIBRARY_ARCHITECTURE,并为CMAKE_PREFIX_PATH中的每个<prefix>设置<prefix>/lib
    • CMAKE_LIBRARY_PATH
    • CMAKE_FRAMEWORK_PATH

  1. 在特定于cmake的环境变量中指定搜索路径。这些将在用户的shell配置中设置。如果传递NO_CMAKE_ENVIRONMENT_PATH,则可以跳过此操作。
    • 如果设置了<prefix>/lib/<arch>,则为CMAKE_LIBRARY_ARCHITECTURE,并为CMAKE_PREFIX_PATH中的每个<prefix>设置<prefix>/lib
    • CMAKE_LIBRARY_PATH
    • CMAKE_FRAMEWORK_PATH

  1. 搜索HINTS选项指定的路径。这些应该是通过系统内省计算出来的路径,例如已经找到的另一个项的位置所提供的提示。硬编码的猜测应该使用PATHS选项指定。
  2. 搜索标准系统环境变量。如果NO_SYSTEM_ENVIRONMENT_PATH是一个参数,则可以跳过这一点。
    • LIB中的目录,<prefix>/lib/<arch>中的CMAKE_LIBRARY_ARCHITECTURE设置,PATH中的每个<prefix>/[s]bin<prefix>/libPATH中其他条目的<entry>/lib,以及PATH本身中的目录。

  1. 搜索当前系统平台文件中定义的cmake变量。如果传递NO_CMAKE_SYSTEM_PATH,则可以跳过此操作。
    • 如果设置了<prefix>/lib/<arch>,则为CMAKE_LIBRARY_ARCHITECTURE,并为CMAKE_SYSTEM_PREFIX_PATH中的每个<prefix>设置<prefix>/lib
    • CMAKE_SYSTEM_LIBRARY_PATH
    • CMAKE_SYSTEM_FRAMEWORK_PATH

  1. 搜索PATHS选项或命令的简短版本中指定的路径。这些通常是硬编码的猜测。

由于CMAKE_PREFIX_PATHCMAKE_LIBRARY_PATH被指定为空(默认情况下),这个问题相当于以下问题:LD_LIBRARY_PATH是由CMAKE_SYSTEM_PREFIX_PATH还是CMAKE_SYSTEM_LIBRARY_PATH考虑的。根据我用CMake 3.7.1做的一个简单测试,他们不考虑LD_LIBRARY_PATH

票数 1
EN

Stack Overflow用户

发布于 2022-07-29 04:39:23

本文中有一个解决方案:https://bbs.huaweicloud.com/blogs/366824是通过LD_LIBRARY_PATH查找库的一种方法:

代码语言:javascript
复制
string(REPLACE ":" ";" RUNTIME_PATH "$ENV{LD_LIBRARY_PATH}")
find_library(SOME_API NAMES jvm HINTS ${RUNTIME_PATH})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41566316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档