簡體   English   中英

在編譯時為運行時設置環境變量

[英]Setting environment variables for run-time in compile-time

我有一個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。

如果您知道需要鏈接的庫將安裝在何處,則可以設置rpath。 這會將搜索路徑添加到ELF標頭中。 當動態鏈接程序運行時,它將在默認位置之外搜索這些位置。

將添加到您的編譯行-Wl,-rpath ./path/to/lib1/ ,-rpath -Wl,-rpath ./path/to/lib1/以從LD_LIBRARY_PRELOAD列表中刪除lib1。 -Wl是必需的,因此編譯器將標志傳遞到鏈接器上,在該鏈接器中可以實際識別它。

這個博客似乎對所有不同的選項都有很好的描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM