Установка переменных среды для времени выполнения во время компиляции - PullRequest
0 голосов
/ 07 октября 2018

У меня есть программа на C ++ Vulkan, для которой необходимо наличие нескольких библиотек во время выполнения.Кроме того, Vulkan имеет функцию «Уровни проверки», которая настроена с помощью файла конфигурации.

Во время выполнения моей программе необходимо знать, где находятся эти библиотеки и где находится этот файл конфигурации.Я предполагаю, что нет никакого способа сделать это программно, но если есть, дайте мне знать.Чтобы обойти это, я установил переменные среды, а именно LD_LIBRARY_PATH (чтобы он мог найти библиотеки) и VK_LAYER_PATH (чтобы он нашел файл конфигурации Vulkan's Validation Layer).

Это работает, но я хочу лучший способ сделать этопотому что это не позволяет мне просто дважды щелкнуть файл и запустить его.Сначала я должен установить env vars, что плохо при развертывании программы.

У меня вопрос: есть ли опция компилятора / компоновщика, чтобы сделать это?

Это обходной путь, который я использую в своем make-файле:

run:
    LD_LIBRARY_PATH=./path/to/lib1/:./path/to/lib2 VK_LAYER_PATH=./path/to/vulkan/config ./program_name

Яиспользуя Linux, g ++ и make.

1 Ответ

0 голосов
/ 08 октября 2018

Если вы знаете, где будут установлены библиотеки, с которыми вы будете ссылаться, вы можете установить rpath.Это добавит путь поиска к заголовку ELF.При запуске динамического компоновщика он будет искать эти местоположения в дополнение к местоположениям по умолчанию.

Добавьте к своей строке компиляции -Wl,-rpath ./path/to/lib1/, чтобы удалить lib1 из списка LD_LIBRARY_PRELOAD.Ключ -Wl необходим, чтобы компилятор передавал флаг компоновщику, где он фактически распознан.

В этом блоге, похоже, есть хорошее описание всех различных опций

...