Как изменить файл спецификации MinGW, чтобы связать его с MSVCR100.dll и MSVCP100.dll?

Я использую Windows 7 и последнюю версию MinGW (gcc v4.7.2).

Моя проблема заключается в том, чтобы заставить MinGW использовать библиотеки времени выполнения «MSVCR100» и «MSVCP100» для простого тестового приложения.

Мой настроенный файл спецификации по умолчанию выглядит следующим образом:

%{mthreads:-lmingwthrd} -lmingw32 %{shared-libgcc:-lgcc_s} %{!shared-libgcc:-lgcc_eh} -lgcc -lmoldname -lmingwex -lmsvcr100 -lmsvcp100

(Дистрибутив mingw не поставляет «MSVCP100.a» в каталоге lib, поэтому я только что создал с помощью «dumpbin» и «dlltool» файл «MSVCP100.a».)

Теперь моя проблема в том, что если я компилирую свое простое тестовое приложение (которое использует boost-date-time и boost-log), я получаю следующие неопределенные ссылки:

  • неопределенная ссылка на `gmtime'
  • неопределенная ссылка на `localtime'

Но это не должно быть возможно, так как в случае, если я скомпилирую свое тестовое приложение с помощью Visual Studio 2010 и затем проанализирую двоичный файл с помощью обходчика зависимостей, я вижу, что dll "MSVCR100" и "MSVCP100" ссылаются.

Зачем мне это нужно? Я выяснил, что мое тестовое приложение дает сбой в Windows XP, но не в системах Win7, так как функция setlocale в msvcrt.dll (v7.0.2600.5512) не является потокобезопасной (пожалуйста, проверьте разговор между мной и сопровождающим boost.log по этой проблеме здесь:
Boost-Журнал). Так что мне было любопытно, не вылетит ли мое тестовое приложение, если я скомпилирую его с помощью Visual Studio 2010 и протестирую двоичный файл на WinXP. Я понял, что сбоя не происходит, поскольку Visual Studio связывает мое тестовое приложение с «MSVCR100.dll» (и MSVCP100.dll).

Из-за некоторых ограничений невозможно перенести код моего проекта из MinGW в Visual Studio. Поэтому я попытался изменить файл спецификаций mingw, чтобы связать его с упомянутой dll.

Вопрос: Как можно запустить MinGW, чтобы больше не ссылаться на «msvcrt.dll», а на «msvcrt100.dll»? Или, в более общем плане: как заставить MinGW использовать те же DLL среды выполнения, что и Visual Studio?

Любая помощь приветствуется. Спасибо,

Рафаэль


person Regina Balusz    schedule 18.06.2013    source источник
comment
Msvcr100.dll — это не библиотека, это DLL. Имена библиотек импорта — msvcrt.lib и msvcprt.lib, требуется лицензия VS.   -  person Hans Passant    schedule 19.06.2013
comment
спасибо за замечание. Я знаю об этом. Просто опечатка! Обновлять!   -  person Regina Balusz    schedule 19.06.2013


Ответы (1)


Попробуйте с:

%{mthreads:-lmingwthrd} -lmingw32 %{shared-libgcc:-lgcc_s} %{!shared-libgcc:-lgcc_eh} -lgcc -lmoldname100 -lmingwex -lmsvcr100 -lmsvcp100

person Amit Naidu    schedule 30.10.2013