Хотя std::getenv
является частью стандарта C ++ (и также стандарта C, но в будущем выберите один язык, который вына самом деле программа, в которой в вашем случае C ++), функция putenv
не является.
Как вы можете видеть из ссылки на POSIX для putenv
аргумент имеет тип char *
.
Это очень важно, и одна вещь, которая отличается между C и C ++: в C литеральная строка может быть передана функциям, ожидающим char *
.В C ++ все строковые литералы константа и могут быть переданы только функциям, ожидающим const char *
.
Для решения вашей проблемы вам нужно использовать непостояннуюмассив, который вы инициализируете, а затем передаете:
char env[] = "LD_LIBRARY_PATH=../Desktop/lib";
putenv(env);
Важное примечание: массив должен быть действителен в течение всего срока службы вашей программы.Это означает, что даже после возврата функции main
.
Лучшим решением (и упомянутым в комментарии) является функция setenv
, которая принимает const char *
в качестве аргумента (и поэтому может использоваться с литеральными строками), а также копирует аргументы, что означает, что нет проблем с областью действия и временем жизни.
Относительно строковых литералов.И в C, и в C ++ они действительно являются массивами символов.Разница в том, что в C ++ массивы постоянны.