如何生成 64 位.dll哪个 gcc 编译器或其他。无法在 AMD 64 位平台上加载 IA 32 位.dll
How to generate 64 bit .dll which gcc compiler or other. Can't load IA 32-bit .dll on a AMD 64-bit platform
嗨,我没有找到如何创建64位dll的解决方案。并使用它的本地c++方法。我使用Java代码metodynatywne.java:
class metodynatywne {
static {
System.loadLibrary("metodynatywne");
}
native public void sayHello();
public static void main (String argv[])
{
new metodynatywne().sayHello();
} }
生成metodynatywne.hjava -jni metodynatywne
我写了metodynatywne.cpp code:
#include <jni.h>
#include <iostream>
#include "metodynatywne.h"
using namespace std;
JNIEXPORT void JNICALL
Java_metodynatywne_sayHello(JNIEnv * env, jobject self)
{
cout << "Hello World!" << endl;
}
我使用gcc来创建我的dll的命令:
c:>c++ -I c:java7include -I c:java7includewin32 -c metodynatywne.cpp
和
c:>c++ -shared metodynatywne.o -o metodynatywne.dll
我得到的是错误信息:
c:>java metodynatywne
Exception in thread "main" java.lang.UnsatisfiedLinkError: C:ProgramowanieUJSemestr2ZPGPerfCountcwiczeniemetodynatywne.dll: Can't lo
ad IA 32-bit .dll on a AMD 64-bit platform
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary1(Unknown Source)
at java.lang.ClassLoader.loadLibrary0(Unknown Source)
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at metodynatywne.<clinit>(metodynatywne.java:4)
我使用Java 1.4 32位javac编译器和java7 x64编译器这两种方法给了我相同的错误。我该怎么处理呢?如果是,请使用另一个c++编译器,如何强制此编译器创建可用的java dll文件。我用的是64位的Windows 7。
我如何从cpp文件64位dll(与gcc) ?还是其他命令行编译器?
非常感谢您的评论和帮助。
您应该为64位重新编译DLL(必须下载64位构建工具)。也可以切换到32位JVM(只需下载32位JVM)。
这个编译器标志应该有帮助:c++——64 -DARCH_X86_64=1 file.cpp
这个问题仍然没有公认的答案,所以我要咬……正如Denis提到的,您需要下载64位编译器来生成.dll。现在大多数人在Windows上使用MinGW-w64 (http://www.mingw.org或直接在这里下载http://sourceforge.net/projects/mingw-w64/files/latest/download?source=files),它有一个非常好的安装包。注意-如果您不使用安装包,则需要自己安装整个工具链。然后,您将使用这个64位编译器可执行文件(类似于'x86_64-w64-mingw32-g++')来代替32位的gcc来生成库。
如上所述,您确实需要小心使用的java版本,以确保它与您编译的c++库的体系结构相匹配。这意味着JNI头文件的Java自动生成和从中调用它的Java运行时。
- 挂起和取消挂起一个文件DLL
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 导入库可以跨dll版本工作吗
- 从C++dll访问C#中的一行主要参数
- 链接到自行创建的dll失败
- 为什么使用 P/Invoke 调用 dll 时,某些计算机中的 LoadLibrary 失败?
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- C++:将外部库链接到dll库
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 不同的Visual Studio版本中缺少.dll
- 从DLL中删除类的实例
- 如何包装第三方DLL在R中使用
- 使用c#访问c++dll中带有char*参数的函数时发生AccessViolationException
- 系统.将数组移交给c#中动态加载的c++DLL时发生AccessViolationException
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- Problems with OpenCL (opencl.dll, AMD APP SDK, cl.h)
- 如何生成 64 位.dll哪个 gcc 编译器或其他。无法在 AMD 64 位平台上加载 IA 32 位.dll
- AMD Gpu Memory dll