尽管阅读了这些文档,但我还是不知道CMake的命令find_library是否搜索了LD_LIBRARY_PATH中列出的目录。
我的测试结果好坏参半。
发布于 2017-01-10 11:22:46
从文档中(我没有复制与cmake变量或find_library参数(此处不相关)相关的文本):
如果指定了
NO_DEFAULT_PATH,则不会向搜索添加其他路径。如果未指定NO_DEFAULT_PATH,则搜索过程如下: ..。
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所用。这是确认的阅读源代码。
测试的混合结果可能来自其他变量,但如果没有对这些测试的详细描述,这只是猜测。
发布于 2017-01-10 12:15:38
根据当前的文档和一个小测试,似乎没有考虑LD_LIBRARY_PATH。
find_library的文档显示
如果指定了
NO_DEFAULT_PATH,则不会向搜索添加其他路径。如果未指定NO_DEFAULT_PATH,则搜索过程如下:
-DVAR=value。如果传递NO_CMAKE_PATH,则可以跳过此操作。<prefix>/lib/<arch>,则为CMAKE_LIBRARY_ARCHITECTURE,并为CMAKE_PREFIX_PATH中的每个<prefix>设置<prefix>/libCMAKE_LIBRARY_PATHCMAKE_FRAMEWORK_PATH
NO_CMAKE_ENVIRONMENT_PATH,则可以跳过此操作。<prefix>/lib/<arch>,则为CMAKE_LIBRARY_ARCHITECTURE,并为CMAKE_PREFIX_PATH中的每个<prefix>设置<prefix>/libCMAKE_LIBRARY_PATHCMAKE_FRAMEWORK_PATH
HINTS选项指定的路径。这些应该是通过系统内省计算出来的路径,例如已经找到的另一个项的位置所提供的提示。硬编码的猜测应该使用PATHS选项指定。NO_SYSTEM_ENVIRONMENT_PATH是一个参数,则可以跳过这一点。LIB中的目录,<prefix>/lib/<arch>中的CMAKE_LIBRARY_ARCHITECTURE设置,PATH中的每个<prefix>/[s]bin的<prefix>/lib,PATH中其他条目的<entry>/lib,以及PATH本身中的目录。
NO_CMAKE_SYSTEM_PATH,则可以跳过此操作。<prefix>/lib/<arch>,则为CMAKE_LIBRARY_ARCHITECTURE,并为CMAKE_SYSTEM_PREFIX_PATH中的每个<prefix>设置<prefix>/libCMAKE_SYSTEM_LIBRARY_PATHCMAKE_SYSTEM_FRAMEWORK_PATH
PATHS选项或命令的简短版本中指定的路径。这些通常是硬编码的猜测。由于CMAKE_PREFIX_PATH和CMAKE_LIBRARY_PATH被指定为空(默认情况下),这个问题相当于以下问题:LD_LIBRARY_PATH是由CMAKE_SYSTEM_PREFIX_PATH还是CMAKE_SYSTEM_LIBRARY_PATH考虑的。根据我用CMake 3.7.1做的一个简单测试,他们不考虑LD_LIBRARY_PATH。
发布于 2022-07-29 04:39:23
本文中有一个解决方案:https://bbs.huaweicloud.com/blogs/366824是通过LD_LIBRARY_PATH查找库的一种方法:
string(REPLACE ":" ";" RUNTIME_PATH "$ENV{LD_LIBRARY_PATH}")
find_library(SOME_API NAMES jvm HINTS ${RUNTIME_PATH})https://stackoverflow.com/questions/41566316
复制相似问题