在Eclipse中使用MinGW 32位构建64位dll

时间:2013-06-06 07:15:04

标签: eclipse dll mingw eclipse-cdt

我在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。

所以我的问题是:

  1. 我可以使用MinGW 32位构建64位DLL,还是需要MinGW 64位版本?
  2. 如果是,我如何调整MinGW和/或Eclipse设置?
  3. 关心Marc

    编辑:正如您在下面的评论中所看到的,我已经尝试将-m64标志设置为构建64位dll。这会导致错误:"sorry, unimplemented: 64-bit mode not compiled in"。 那么有没有办法在mingw32中运行64位模式。

3 个答案:

答案 0 :(得分:7)

我最近遇到了同样的问题,安装MinGW-64版本为我启用了-m64标志。您可以从here获得自动构建。

编辑:有些人(rubenvb)在Personal Builds中做得很好:

gcc 4.7.4 here甚至4.8.0 here

答案 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