Вход из динамически загружаемой библиотеки - PullRequest
0 голосов
/ 24 июня 2018

У меня есть настольное приложение C ++, которое может регистрировать сообщения с использованием библиотеки 'spdlog' (https://github.com/gabime/spdlog).). Теперь я хотел бы использовать тот же регистратор из динамически загружаемой библиотеки DLL. Однако, когда я пытаюсь использовать spdlog из DLL, я получаю сбой.

Как настроить динамически загружаемую DLL для использования того же регистратора, что и в главном приложении?

1 Ответ

0 голосов
/ 24 июня 2018

Я нашел одну возможную причину проблемы.

spdlog только для заголовка.Если у вас есть две копии журнала, одна в вашем приложении и одна в вашей dll, и вы передаете динамические ссылки из копии spdlog приложения в копию dll, и вы скомпилировали приложение и dll с различными параметрами, вы можете завершитьс двумя несовместимыми определениями функций класса spdlog.

Особые ошибочные параметры:

/Gd     Uses the __cdecl calling convention (x86 only).
/GR     Enables run-time type information (RTTI).
/Gr     Uses the __fastcall calling convention (x86 only).
/Gv     Uses the __vectorcall calling convention. (x86 and x64 only)
/vmm    Declares multiple inheritance.
/vms    Declares single inheritance.
/vmv    Declares virtual inheritance.
/vmb    Uses best base for pointers to members.
/vmg    Uses full generality for pointers to members.
/Zp     Packs structure members.

Каждый из этих параметров изменяет интерпретацию каждого объявления в обрабатываемых файлах.Таким образом, было нарушено одно правило определения с неопределенным поведением в качестве наказания.

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