MinGW просто эмулирует вызовы ОС Linux. Позвольте мне объяснить ..
Когда вы создаете двоичный файл, работающий в определенной ОС, этот двоичный файл должен знать, как взаимодействовать с базовой ОС. Это важно для таких вещей, как распределение памяти. Двоичный файл изначально не «знает», как распределять оперативную память, вместо этого он запрашивает у операционной системы хоста немного оперативной памяти. Это делается путем вызова функции выделения, которая находится по заранее определенному «адресу» внутри ОС.
Как приложение узнает, по какому «адресу» существует метод выделения?
Когда вы компилируете двоичный файл, вы привязываете к нему "C runtime library (CRT)". Эта библиотека содержит все сопоставления для взаимодействий ОС, которые потребуются двоичному файлу. Так, например, когда вы связываете CRT, двоичный файл теперь знает, где он может найти функцию выделения памяти, предоставляемую ОС.
MinGW, вставляет уровень эмуляции, так что приложение считает, что оно связывается с CRT Linux, но на самом деле уровень эмуляции просто перенаправляет вызовы в Microsoft CRT.
Windows имеет несколько различных ЭЛТ. На всех дистрибутивах вы можете найти где-нибудь в %PATH%
файл msvcrt.dll
. Этот файл предоставляет всю поддержку, необходимую для запуска двоичного файла в ОС.
При установке Visual Studio вы получаете обновленные версии CRT:
- В VS 2005: msvcrt80.dll
- В VS 2008: msvcrt90.dll
- В VC 2010: msvcrt100.dll
Очевидно, установив Visual Studio, вы заставили слой эмуляции MinGW связываться с msvcrt100.dll
, а не с msvcrt.dll
, который распространяется на всех компьютерах с Windows. Я не знаю, почему это происходит, но это IS , что происходит.
EDIT
Команда:
dlltool --input-def .\lib\jvm.def --kill-at --dllname jvm.dll --output-lib .\lib\libjvm.dll.a
При создании файла, который ссылается на jvm.dll
, может возникнуть зависимость msvcrt100.dll
. То есть jvm.dll
может быть динамически связано с новейшей ЭЛТ, а поскольку вам требуется jvm.dll
, вам косвенно требуется msvcrt100.dll
.
Найдены ли какие-либо dll в "" C: \ Program Files \ Java \ jdk1.7.0 \ bin "?