我有一个C ++ Vulkan程序,该程序需要多个库才能在运行时可用。另外,Vulkan具有称为“验证层”的功能,该功能已通过配置文件进行配置。
在运行时,我的程序需要知道这些库在哪里以及该配置文件在哪里。我猜测无法以编程方式进行,但是如果有,请告诉我。要解决此问题,我设置了环境变量,即LD_LIBRARY_PATH(用于查找库)和VK_LAYER_PATH(用于查找Vulkan的Validation Layer配置文件)。
这可行,但是我想要一种更好的方法,因为这不允许我简单地双击文件并运行它。我必须首先设置env vars,如果我正在部署程序,这是很糟糕的。
我的问题是:是否有编译器/链接器选项可以做到这一点?
这是我在Makefile中使用的解决方法:
run:
LD_LIBRARY_PATH=./path/to/lib1/:./path/to/lib2 VK_LAYER_PATH=./path/to/vulkan/config ./program_name
我正在使用Linux,g ++和make。
答案 0 :(得分:1)
如果您知道需要链接的库将安装在哪里,则可以设置rpath。这会将搜索路径添加到ELF标头中。当动态链接程序运行时,它将在默认位置之外搜索这些位置。
添加到编译行-Wl,-rpath ./path/to/lib1/
,将lib1从LD_LIBRARY_PRELOAD列表中删除。需要-Wl,以便编译器将标志传递到链接器上,在该链接器中可以实际识别它。
This blog seems to have a good description of all the different options