我在Windows 7 64位上安装了32位版本的Mingw 4.7.2(使用安装程序)。 我在Eclipse C ++项目中使用MinGW来构建.dll文件。到目前为止一切正常。
但是我使用这个.dll通过JNI包含在java项目中。当我在java项目中调用.dll的函数时异常"Exception in thread "main" java.lang.UnsatisfiedLinkError: D:\path\mylib.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform"
被扔了。
所以看起来我需要构建一个64位版本的DLL。
所以我的问题是:
关心Marc
编辑:正如您在下面的评论中所看到的,我已经尝试将-m64标志设置为构建64位dll。这会导致错误:"sorry, unimplemented: 64-bit mode not compiled in"
。
那么有没有办法在mingw32中运行64位模式。
答案 0 :(得分:7)
我最近遇到了同样的问题,安装MinGW-64
版本为我启用了-m64
标志。您可以从here获得自动构建。
编辑:有些人(rubenvb
)在Personal Builds
中做得很好:
答案 1 :(得分:5)
您可以从http://tdm-gcc.tdragon.net/下载TDM-GCC编译器,安装简便的Windows。
然后,您可以运行以下命令从C代码源文件HelloWorld.c生成64位C代码对象文件。
"C:\MinGW64\bin\gcc.exe" -m64 -c -I"C:\Program Files\Java\jdk1.6.0_26\include" -I"C:\Program Files\Java\jdk1.6.0_26\include\win32" HelloWorld.c
这应该从与HelloWorld.c相同的目录运行,并在该目录中生成HelloWorld.o文件。 -m64
使其为64位。您可以指定-m32
来生成32位目标文件并指定-o
,以提供上述注释中提到的输出。
答案 2 :(得分:1)
您可以将-m64
开关设置为编译64位lib。
除了上面的x86-64之外,还支持这些'-m'开关 64位环境中的处理器。
-m32 -m64 -mx32 为32位或64位环境生成代码。 -m32选项将int,long和指针类型设置为32位,并生成代码 在任何i386系统上运行。
-m64选项将int设置为32位,将long和指针类型设置为64位,并为x86-64体系结构生成代码。为达尔文 只有-m64选项也会关闭-fno-pic和-mdynamic-no-pic 选项。
-mx32选项将int,long和指针类型设置为32位,并为x86-64体系结构生成代码。
(来源:http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86_002d64-Options.html)
示例:强>
32位: gcc -m32 -o exmaple32 example.c
64位: gcc -m64 -o exmaple64 example.c
(与g++
相同)
您可以在日食中设置它们: (right click on your project) -> Properties -> C/C++ Build -> Settings