Ответ 1
Я рекомендую вам скачать и установить последнюю версию MinGW-w64 не только потому, что она является кровоточащей, но он также содержит библиотеку импорта libmsvcr110.a
для ссылки. Затем попробуйте следующее:
specs.msvcr110
%rename cpp msvcrXX_cpp
%rename cc1plus msvcrXX_cc1plus
*cpp:
%(msvcrXX_cpp) -D__MSVCRT_VERSION__=0x1100 -D__USE_MINGW_ACCESS
*cc1plus:
%(msvcrXX_cc1plus) -D__MSVCRT_VERSION__=0x1100 -D__USE_MINGW_ACCESS
*libgcc:
%{mthreads:-lmingwthrd} -lmingw32 %{shared-libgcc:-lgcc_s} -lgcc -lmoldname110 -lmingwex -lmsvcr110
libmoldname110.a
Как некоторые из вас по праву заметили, на самом деле нет libmoldname110.a
поставляемого готового продукта (и для этого есть веские причины). Тем не менее, как обычно, никто не мешает вам строить его самостоятельно. Для этого вам сначала нужно получить <mingw-w64-source-dir>/mingw-w64-crt/lib64/moldname-msvcrt.def
, а затем использовать (сладкий) dlltool
следующим образом:
$ dlltool -k -U --as=as --def=moldname-msvcrt.def --dllname=msvcr110.dll --output-lib=libmoldname110.a
Примечание:
К сожалению, на данный момент у меня нет возможности проверить это точно. Поэтому, пожалуйста, сообщите свой опыт в комментариях, чтобы мы могли совместно придумать окончательное решение.
test.rc
#include <winuser.h>
// Choose:
1 RT_MANIFEST msvcr110.manifest // if linking executable
2 RT_MANIFEST msvcr110.manifest // if linking DLL
msvcr110.manifest
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
</requestedPrivileges>
</security>
</trustInfo>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC110.CRT" version="11.0.51106.1" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b">
<file name="msvcr110.dll" />
<file name="msvcp110.dll" />
<file name="msvcm110.dll" />
</assemblyIdentity>
</dependentAssembly>
</dependency>
</assembly>
Посмотрите Манифест приложений.
Постройте
$ windres -i test.rc -o test.rc.o --output-format=coff
$ gcc -specs=specs.msvcr110 -o test test.c test.rc.o
Рекомендации
Хотя среда Microsoft Visual C Runtime включена на большинстве платформ, существует множество различных ее версий, некоторые из которых багги или/и нарушают обратную совместимость. Таким образом, всегда рекомендуется распространять версию msvcr*.dll
, которая, как вы знаете, работает с вашим приложением.