如何防止动态链接器中的绝对路径

How to prevent absolute paths in dynamic linker

我有各种项目的解决方案,其中一个是主要的可执行文件,其余的是可执行文件所依赖的库。每一个都编译并且 link 没问题。但是,尝试启动可执行文件会产生奇怪的结果。使用 ldd,我看到可执行文件正在尝试查找这样的库:

../bin/debug/libBlahBlah.so => not found

但是,对于每个项目,我将 "bin/debug"(这是这些库的输出目录)声明为 libdirs 条目,并通过添加 [=22] 来针对库 linking =] 作为 link,其中 "BlahBlah" 是项目的名称。

我什至不确定如何在没有预制的情况下完成此操作。任何帮助表示赞赏。

最初的目的是让库位于可执行文件旁边,然后设置一个 RPATH 来搜索可执行文件旁边的库。按照现在的方式,它会搜索相对于可执行文件的绝对路径......我不知道如何解决它。

我正在使用 premake5。我试过每晚使用并自己编译。然而,上游目前没有编译。

如果您使用的是最新的 alpha 版或 Premake5 源代码,您可以使用 "RelativeLinks" 标志来使用 -L/-l 而不是库的相对路径:

project "MyProject"
   flags "RelativeLinks"

不过您仍然需要正确设置 rpath;您可以使用 buildoptions() 和适用于您的编译器的命令行标志来做到这一点。也许(未经测试):

buildoptions "-Wl,-rpath=."

这应该也适用于 Premake 4。