8

我在我的 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 设置才能这样做?

问候马克

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

4

3 回答 3

7

I recently faced the same problem, installing the MinGW-64 version enabled the -m64 flag for me. You can get an automated build from here.

EDIT : Some guy (rubenvb) made some good job in the Personal Builds :

There's gcc 4.7.4 here and even 4.8.0 here.

于 2013-06-07T12:25:42.430 回答
4

您可以从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, 以提供上述注释中提到的输出。

于 2013-08-10T01:36:39.653 回答
1

您可以设置-m64开关来编译 64 位库。

除了上述在 64 位环境中的 x86-64 处理器上,还支持这些“-m”开关。

-m32 -m64 -mx32 为 32 位或 64 位环境生成代码。-m32 选项将 int、long 和指针类型设置为 32 位,并生成可在任何 i386 系统上运行的代码。

-m64 选项将 int 设置为 32 位,将 long 和指针类型设置为 64 位,并为 x86-64 体系结构生成代码。对于 Darwin,只有 -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++

您可以在 Eclipse 中设置它们:(right click on your project) -> Properties -> C/C++ Build -> Settings

于 2013-06-06T17:55:45.043 回答