gpt4 book ai didi

linux - 在 linux 上使用私有(private) C++ 运行时库

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:50:59 25 4
gpt4 key购买 nike

在 Windows 中,动态加载器总是首先在加载的可执行文件的路径中查找模块,这使得在不影响系统库的情况下拥有私有(private)库成为可能。

Linux 上的动态加载器仅在固定路径中查找库,因为它独立于所选的二进制文件。我需要 GCC 5 的溢出检查算术函数,但由于 C++ ABI 在 4.9 和 5 之间发生变化,一些应用程序变得不稳定,重新编译它们解决了这个问题。在等待我的发行版 [kubuntu] 升级默认编译器时,是否可以让新编译的应用程序链接到新的运行时,而打包的应用程序仍然通过静态链接或模仿 Windows 行为的方式链接到旧库?

模拟它的一种方法是创建一个包装器脚本

#!/bin/bash
LD_LIBRARY_PATH=$(dirname $(which your_file)) your_file

在链接步骤之后复制受影响的库,但这有点像 hack。

最佳答案

您可以使用rpath

假设您的“新 ABI”共享库位于 /usr/local/newapi-libs 中。

gcc -L/usr/local/newapi-libs
-Wl,-rpath,/usr/local/newapi-libs
program.cpp -o program -lsomething`

链接器的 -rpath 选项是 -L 的运行时对应项。当运行以这种方式编译的程序时,链接器将首先在 /usr/local/newapi-libs 中查找,然后再搜索系统库路径。

更多信息 herehere .

您可以通过指定 -Wl,-rpath, 来模拟 Windows 在可执行文件目录中查找的行为。

[edit] 在 rpath 之前添加了缺少的 -L 参数和破折号。

关于linux - 在 linux 上使用私有(private) C++ 运行时库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31826565/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com