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设置为应用程序所需的任何内容.这也有可能稍微便于移植(如果你处理其他共享库路径环境变量,那么一些操作系统有). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |