加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 在基于libtool的项目中使用-rpath和$ORIGIN?

发布时间:2020-12-16 06:56:39 所属栏目:百科 来源:网络整理
导读:我试图将基于libtool的包合并到我自己的项目中,可能是以非标准的方式.这是我的目标: 构建外部项目: ./configure --prefix=$HOME/blah --etcetera make make install 构建我自己的项目,该项目在运行时依赖于外部项目的共享库和可执行文件: gcc -I$HOME/bla
我试图将基于libtool的包合并到我自己的项目中,可能是以非标准的方式.这是我的目标:

>构建外部项目:

./configure --prefix=$HOME/blah --etcetera && make && make install

>构建我自己的项目,该项目在运行时依赖于外部项目的共享库和可执行文件:

gcc -I$HOME/blah/include -L$HOME/blah/lib -o $HOME/blah/bin/program

>将所有内容打包成一个“本地化”tarball …也就是说,虽然我在构建主机上有$HOME / blah中的所有内容,但我希望能够将tarball提取到任意目录(在其他主机上),而不必与我的环境相比.目的是允许我的项目的多个版本并排共存,没有任何令人讨厌的“异花授粉”.

我知道我可以为我的项目使用-rpath’$ORIGIN /../ lib’来确保在运行时始终加载正确的共享库.但是,似乎libtool坚持根据$HOME / blah / lib的确切路径分配自己的-rpath设置,如果我碰巧将所有内容解压缩到另一个目录(例如,$HOME / blah),它会中断. 2011-06-02).

有没有解决这个限制的方法?我在这个主题上看到了rather lengthy rpath discussion between debian and libtool folks,但是除了“我们不同意”之外,它还有点陈旧和不确定.

解决方法

在debian Wiki上 Rpathissue这里提供的选项中,在“安装”步骤中使用 chrpath或者一些后处理脚本听起来像是一个可行的选项. (它可以通过您最喜欢的包管理器在一堆发行版中找到.)

它不需要修补libtool,这是一个加IMO.

请注意,它有一些限制:如果新rpath比原始rpath更短(或相同),则只能保存新rpath.

另一个(实用的)选项是删除rpath(chrpath可以这样做),并且只有一个包装器脚本可以将LD_LIBRARY_PATH设置为应用程序所需的任何内容.这也有可能稍微便于移植(如果你处理其他共享库路径环境变量,那么一些操作系统有).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读