C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 在基于libtool的项目中使用-rpath和$ORIGIN?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图将基于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设置为应用程序所需的任何内容.这也有可能稍微便于移植(如果你处理其他共享库路径环境变量,那么一些操作系统有).

大佬总结

以上是大佬教程为你收集整理的c – 在基于libtool的项目中使用-rpath和$ORIGIN?全部内容,希望文章能够帮你解决c – 在基于libtool的项目中使用-rpath和$ORIGIN?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。