运行使用MinGW生成的可执行文件时缺少msvcr100.dll错误 我成功编译(MinGW),运行我的C++程序(通过JNI调用java类),由我的WiN-764位系统上的多个文件组成。编译和运行由2个批处理文件完成。我安装了VisualStudioC++ 2010,但自从那时以来就没有使用过。
我现在正试图将此程序部署到另一台运行WinXP-32位的计算机上,我面临一个“missing msvcr100.dll”错误。我安装了最新的MinGW和JDK,我使用相同的批处理文件编译了我的程序,但是当我运行它时,我得到了错误。VisualStudio没有在建筑的任何部分使用(我也不希望它使用),所以我觉得奇怪的是,我收到了关于MSVC++dll的消息 编译.bat运行使用MinGW生成的可执行文件时缺少msvcr100.dll错误 我成功编译(MinGW),运行我的C++程序(通过JNI调用java类),由我的WiN-764位系统上的多个文件组成。编译和运行由2个批处理文件完成。我安装了VisualStudioC++ 2010,但自从那时以来就没有使用过。,c++,java-native-interface,mingw,C++,Java Native Interface,Mingw,我现在正试图将此程序部署到另一台运行WinXP-32位的计算机上,我面临一个“missing msvcr100.dll”错误。我安装了最新的MinGW和JDK,我使用相同的批处理文件编译了我的程序,但是当我运行它时,我得到了错误。VisualStudio没有在建筑的任何部分使用(我也不希望它使用),所以我觉得奇怪的是,我收到了关于MSVC++dll的消息 编译.bat rem Set the include paths for the JNI header files("include" and
rem Set the include paths for the JNI header files("include" and "include\win32" inside the jdk (32-bit) directory).
set JDK_INCLUDE="C:\Program Files\Java\jdk1.7.0\include"
set JDK_INCLUDE_WIN32="C:\Program Files\Java\jdk1.7.0\include\win32"
set PATH=%PATH%;C:\MinGW\bin
rem Build an import library for the jvm.dll from the .\lib\jvm.def file (see http://www.inonit.com/cygwin/jni/invocationApi/archive.html)
dlltool --input-def .\lib\jvm.def --kill-at --dllname jvm.dll --output-lib .\lib\libjvm.dll.a
rem Set the import library directory.
set JVM_IMPORT_DLL=".\lib"
rem Compile all files (including the IngToolTest.cpp) and create an executable file .\bin\COFORM_JNI.exe
g++ -I%JDK_INCLUDE% -I%JDK_INCLUDE_WIN32% .\src\DataTypes\file1.cpp .\src\IngestionTool\file2.cpp ... .\src\file25.cpp Test.cpp -L%JVM_IMPORT_DLL% -ljvm -o .\bin\executable.exe
pause
跑吧,蝙蝠
Rem Set the environment parameter to the path where the properties file resides.
set CONFIG_DIR=..
Rem Set the environment parameter to the actual IP of your VM machine.
set VM_URL=139.191.173.43
Rem Set the location of the jvm.dll (32-bit)
set PATH=%PATH%;C:\Program Files\Java\jdk1.7.0\jre\bin\client
move *.rdf RDFS
.\bin\executable.exe
pause
有没有可能是我的一个外部包引起的?这是:
#include <stdio.h>
#include <cstdlib>
#include <iostream>
#include <jni.h>
#include <vector>
#include <string.h>
#include <fstream>
using namespace std;
#包括
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
如果有人能帮我克服这个错误,我将不胜感激
KDLL包含编译程序的运行时。它必须安装在另一台机器上才能运行该程序 标准程序发行版有一个安装包,可以为您执行此操作,也可以手动安装 有关下载说明,请参见此处
DLL包含编译程序的运行时。它必须安装在另一台机器上才能运行该程序 标准程序发行版有一个安装包,可以为您执行此操作,也可以手动安装 有关下载说明,请参见此处
MinGW只模拟Linux操作系统调用。让我解释一下 当您创建在特定操作系统上运行的二进制文件时,该二进制文件需要知道如何与底层操作系统交互。这对于内存分配之类的事情很重要。二进制文件本身并不“知道”如何分配RAM,相反,它要求主机操作系统给它一些RAM。它通过调用驻留在操作系统内部预定“地址”的分配函数来实现这一点 应用程序如何知道分配方法的“地址” 当您编译二进制文件时,您将一个“C运行时库(CRT)”绑定到它。该库包含二进制文件需要的操作系统交互的所有映射。例如,当您链接CRT时,二进制文件现在知道在哪里可以找到操作系统公开的内存分配函数 MinGW插入了一个仿真层,这样应用程序就可以认为它链接到了Linux CRT,但实际上,仿真层只是将调用重定向到Microsoft CRT Windows有许多不同的CRT可用。在所有发行版上,您都可以在
%PATH%
文件msvcrt.dll
中找到。此文件提供了二进制文件在操作系统中运行所需的所有支持
安装Visual Studio时,您将获得CRT的更新版本:
msvcrt100.dll
,而不是所有windows机器上的msvcrt.dll
。我不知道为什么会发生这种情况,但这就是正在发生的事情
编辑
命令:
dlltool --input-def .\lib\jvm.def --kill-at --dllname jvm.dll --output-lib .\lib\libjvm.dll.a
它正在生成一个链接到jvm.dll
的文件,可能会创建msvcrt100.dll
依赖项。也就是说,jvm.dll
可能会根据最新的CRT动态链接,因为您需要jvm.dll
,所以间接需要msvcrt100.dll
在“C:\Program Files\Java\jdk1.7.0\bin”中是否找到任何dll?MinGW仅模拟Linux操作系统调用。让我解释一下 当你创建一个运行在某个操作系统上的二进制文件时,该二进制文件需要知道如何与底层操作系统交互。这对于内存分配之类的事情很重要。二进制文件本身并不“知道”“如何分配RAM,相反,它要求主机操作系统给它一些RAM。它通过调用驻留在操作系统内部预定“地址”的分配函数来实现这一点 应用程序如何知道分配方法的“地址” 当您编译二进制文件时,您将一个“C运行时库(CRT)”绑定到它。该库包含二进制文件需要的操作系统交互的所有映射。例如,当您链接CRT时,二进制文件现在知道在哪里可以找到操作系统公开的内存分配函数 MinGW插入了一个仿真层,这样应用程序就可以认为它链接到了Linux CRT,但实际上,仿真层只是将调用重定向到Microsoft CRT Windows有许多不同的CRT可用。在所有发行版上,您都可以在
%PATH%
文件msvcrt.dll
中找到。此文件提供了二进制文件在操作系统中运行所需的所有支持
安装Visual Studio时,您将获得CRT的更新版本:
msvcrt100.dll
,而不是所有windows机器上的msvcrt.dll
。我不知道为什么会发生这种情况,但这就是正在发生的事情
编辑
命令:
dlltool --input-def .\lib\jvm.def --kill-at --dllname jvm.dll --output-lib .\lib\libjvm.dll.a
它正在生成一个链接到jvm.dll
的文件,可能会创建msvcrt100.dll
依赖项。也就是说,jvm.dll
可能会根据最新的CRT动态链接,因为您需要jvm.dll
,所以间接需要msvcrt100.dll
在“C:\Program Files\Java\jdk1.7.0”中是否找到任何dll