使用GCC编译并重新定位链接库

使用GCC编译并重新定位链接库,gcc,linker,Gcc,Linker,我有我的soft.c,我成功地编译了它,并将它链接到/usr/lib/myLib.so 一切都还好,除了它不是我要找的事实,我想管理链接的最后一条路径,换句话说,我想GCC考虑库 /Ur/Lb/MyLIB。所以,。但我也希望最后的链接是一条相对路径,有点像“代码>…/MyLIB。所以 通常的情况是 /soft链接到->/usr/lib/myLib.so 我想要 /soft链接到->。/myLib.so 显然,我还需要GCC来管理任何交叉引用的库,例如,如果/usr/lib/myLib.so链接

我有我的
soft.c
,我成功地编译了它,并将它链接到
/usr/lib/myLib.so

一切都还好,除了它不是我要找的事实,我想管理链接的最后一条路径,换句话说,我想GCC考虑库<代码> /Ur/Lb/MyLIB。所以,。但我也希望最后的链接是一条相对路径,有点像“代码>…/MyLIB。所以

通常的情况是

/soft
链接到->
/usr/lib/myLib.so

我想要

/soft
链接到->
。/myLib.so

显然,我还需要GCC来管理任何交叉引用的库,例如,如果
/usr/lib/myLib.so
链接到其他库,我希望所有涉及的库都在相对路径中重新定位,以便
。/myLib.so
可以从相对路径完全工作

如何做到这一点


谢谢。

您可以使用
-rpath
选项将运行时搜索路径信息包含到二进制文件中(传递给gcc as
-Wl、-rpath、


请注意,分发维护人员通常不赞成这样做,因为应该有一个单一的系统范围的库搜索路径,以便尽早捕获冲突。

您可以在二进制文件中包含运行时搜索路径信息,使用链接器的
-rpath
选项(作为
-Wl,-rpath,
传递给gcc)


请注意,发行版维护人员通常不赞成这样做,因为应该有一个单一的系统范围库搜索路径,以便尽早发现冲突。

接近解决方案,但这不是我真正想要的。这会向链接器添加1个搜索目录,我希望我的可执行文件仅链接到我的亲属,而不包括任何其他选项,我宁愿从相对路径中错过一个库,而不是拥有一个目录池,我的可执行文件可以链接到其中,并且不知道将使用哪个库。使用-rpath,系统范围的libs仍然在使用中。接近解决方案,但这不是我真正想要的。这会在链接器中添加1个搜索目录,我想要我的可执行文件仅链接到我的亲戚,不包括任何其他选项,我宁愿从相对路径中错过一个库,而不是拥有一个目录池,我的可执行文件可以链接到该目录池,并且不知道将使用哪个库。使用-rpath,系统范围的libs仍在使用。