关于BUILD_RPATH_USE_ORIGIN的cmake文档页面提到了$ORIGIN令牌的存在,但没有解释它是什么或如何使用它。我似乎也找不到任何特定于此$ORIGIN令牌的在线资源。有人能给予我一个解释吗?
$ORIGIN
cedebl8k1#
它与CMake没有什么特别的关系--更多的是与库加载器有关。一些平台将标记“$ORIGIN“视为特殊含义。例如,引用ld.so手册页中名为“动态字符串标记”的部分:$ORIGIN(或等效的${ORIGIN})这将扩展到包含程序或共享对象的目录。
ld.so
${ORIGIN}
gcc -Wl,-rpath,'$ORIGIN/../lib'
字符串这样,无论somedir位于目录层次结构中的哪个位置,它都可以在somedir/lib中找到相关的共享对象。这有助于创建“交钥匙”应用程序,这些应用程序不需要安装到特殊目录中,而是可以解压缩到任何目录中,并且仍然可以找到自己的共享对象。它提到了token在--library-path参数和LD_LIBRARY_PATH、LD_PRELOAD和LD_AUDIT环境变量等上下文中的含义。CMake的社区wiki也有一些关于它的内容-主要是相同的效果:$ORIGIN:在Linux/Solaris上,指定任何RPATH设置可能是一个非常好的主意,它需要通过一个 * 相对 * 表达式来查找包的私有库的位置,这样就不会失去提供一个 * 完全可重定位 * 包的能力。这就是$ORIGIN的用途。在CMAKE_INSTALL_RPATH行中,它的美元符号应该用一个反斜杠转义,这样在最终的可执行文件中才能有正确的语法。然后继续讨论在其他平台上做同样事情的机制。如果你想要一些其他的使用技巧,请参阅Craig Scott's talk "Deep CMake for Library Authors" at ~t=49:30,其中也谈到了其他平台上的其他机制。支持$ORIGIN的平台包括(但不一定限于)Linux和Solaris。
somedir
somedir/lib
--library-path
LD_LIBRARY_PATH
LD_PRELOAD
LD_AUDIT
CMAKE_INSTALL_RPATH
1条答案
按热度按时间cedebl8k1#
它与CMake没有什么特别的关系--更多的是与库加载器有关。一些平台将标记“
$ORIGIN
“视为特殊含义。例如,引用
ld.so
手册页中名为“动态字符串标记”的部分:$ORIGIN
(或等效的${ORIGIN}
)这将扩展到包含程序或共享对象的目录。字符串
这样,无论
somedir
位于目录层次结构中的哪个位置,它都可以在somedir/lib
中找到相关的共享对象。这有助于创建“交钥匙”应用程序,这些应用程序不需要安装到特殊目录中,而是可以解压缩到任何目录中,并且仍然可以找到自己的共享对象。它提到了token在
--library-path
参数和LD_LIBRARY_PATH
、LD_PRELOAD
和LD_AUDIT
环境变量等上下文中的含义。CMake的社区wiki也有一些关于它的内容-主要是相同的效果:
$ORIGIN
:在Linux/Solaris上,指定任何RPATH设置可能是一个非常好的主意,它需要通过一个 * 相对 * 表达式来查找包的私有库的位置,这样就不会失去提供一个 * 完全可重定位 * 包的能力。这就是$ORIGIN
的用途。在CMAKE_INSTALL_RPATH
行中,它的美元符号应该用一个反斜杠转义,这样在最终的可执行文件中才能有正确的语法。然后继续讨论在其他平台上做同样事情的机制。
如果你想要一些其他的使用技巧,请参阅Craig Scott's talk "Deep CMake for Library Authors" at ~t=49:30,其中也谈到了其他平台上的其他机制。
支持
$ORIGIN
的平台包括(但不一定限于)Linux和Solaris。