Статически связанные неуправляемые библиотеки и C ++ CLR - PullRequest
1 голос
/ 15 мая 2009

Можно ли использовать библиотеки libs, скомпилированные с / MT в C ++ CLR? Это выдает мне либо тонну ошибок LNK2022 «Ошибка операции метаданных (8013118D)» (если я использую / MD в проекте CLR), либо параметры командной строки «/ MT» и «/ clr: pure» несовместимы », если я использовать /MT.

Что мне нужно изменить в библиотеке? Библиотека моя, но она включает несколько статических библиотек сторонних производителей.

Ответы [ 2 ]

3 голосов
/ 11 июня 2009

LNK2022 - боль, чтобы точно определить. Обычно это означает, что одна из настроек вашего модуля, влияющая на структуру, отличается от других.

Проверьте следующие обычные причины:

  • Убедитесь, что все ваши проекты используют одну и ту же библиотеку времени выполнения (/ MDd или / MD) для текущей конфигурации решения. Если один проект использует Debug, а другие используют Release или наоборот, вы получите ошибки LNK2022.
  • Убедитесь, что все ваши проекты используют одинаковое выравнивание элементов структуры. Обратите особое внимание, если в одном проекте используется ключ / Zp. Также убедитесь, что вы не используете #pragma pack (n) условно.

Вы можете использовать / d1reportSingleClassLayout_your-class-name_ (без пробела), чтобы получить информацию о макете проблемного класса.

Для получения дополнительной информации см .: Диагностика скрытых нарушений ODR в Visual C ++

1 голос
/ 15 июня 2009

Единственный способ смешать статические библиотеки нативного кода, скомпилированные с различными версиями среды выполнения crt, - это написать DLL, которая действует как мост между библиотеками. Например:

your.exe - скомпилировано с / MD и clr yourbridge.dll - собственный, скомпилированный с / MT и включающий все сторонние библиотеки, созданные с использованием /MT.

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