g cc функция инициализации библиотеки доступа к текущему имени исполняемого файла - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть общая библиотека (g cc на Linux, написанная на C ++, если это имеет значение), которая должна запускать функцию конструктора. Эта функция конструктора должна обрабатывать файл конфигурации, который может находиться в том же каталоге, что и исполняемый файл, или в другом предопределенном месте. Другими словами, мне нужно знать значение argv[0] внутри функции конструктора библиотеки. Какой правильный способ сделать это?

static void __attribute__((constructor)) mylib_init()
{
   // need access to config file which is in the same directory as executable
}

Ответы [ 2 ]

0 голосов
/ 27 апреля 2020

Похоже, glibc предоставляет путь к исполняемому в данный момент исполняемому файлу через extern const char *__progname_full; см. Здесь

0 голосов
/ 27 апреля 2020

Существует простой способ получить argv в конструкторе g cc.

Однако на Linux вы можете прочитать /proc/self/cmdline и получить имя команды. Из которого вы можете найти интересующий вас каталог.

/proc/self/cmdline будет содержать все аргументы, включая команду, разделенные нулевым символом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...