С++, не присваиваются значения глобальных inline переменных
Переменные объявлены в .h файле, этот файл подключается только один раз. Сам .h файл - API файл библиотеки .so, которая динамически линкуется к бинарнику. При присваивании им значения оно не устанавливается.
Пример объявления:
#define EXPORT __attribute__ ((visibility ("default")))
inline EXPORT std::filesystem::path g_config_path;
gdb:
108 g_run_path = "/run/" NT_VENDOR;
(gdb) n
109 g_var_path = "/var/lib/" NT_VENDOR;
(gdb) p g_run_path
$6 = filesystem::path ""
(gdb) n
110 }
(gdb) p g_var_path
$7 = filesystem::path ""
276 PARSE_NUMBER_OPT(g_proc_id); # В макросе устанавливается значение g_proc_id из optarg
(gdb) p optarg
$9 = 0x7fffffffe2ca "1"
(gdb) n
277 break;
(gdb) p g_proc_id
$10 = {_value = 0 '\000', _has_value = false}
377 g_config_path = fs::absolute(cfgfile, ec);
(gdb) p cfgfile
$11 = 0x7fffffffe288 "./example.conf"
(gdb) n
378 if (ec)
(gdb) p g_config_path
$12 = filesystem::path ""
И так далее.
Из-за чего такое может быть?
Источник: Stack Overflow на русском