Использование глобальной переменной в общей библиотеке - PullRequest
6 голосов
/ 27 ноября 2010

Я пишу приложение на C, в котором используется глобальная переменная (структура файла журнала). В моем приложении я динамически загружаю разделяемые библиотеки во время выполнения и хочу использовать глобальную переменную, указывающую на ту же структуру лог-файла, для ведения журнала в разделяемой библиотеке.

Это кажется невозможным при простом подходе:

  • объявление глобальной переменной как extern не будет работать, потому что dlopen () говорит, что глобальная переменная является неопределенным символом
  • определение глобальной переменной снова будет работать, но «новая» переменная не будет такой же, как «оригинальная» в исполняемом файле

Любой намек на то, как это исправить, было бы замечательно.

Спасибо!

1 Ответ

8 голосов
/ 27 ноября 2010

Вам необходимо скомпилировать основное приложение с флагом -rdynamic (например: gcc -g -rdynamic -o main main.c) и объявить глобальную переменную в вашей динамической библиотеке с помощью extern.

...