【问题标题】:Building 64 bit dll with MinGW 32 bit in Eclipse在 Eclipse 中使用 MinGW 32 位构建 64 位 dll
【发布时间】:2013-06-02 02:19:04
【问题描述】:

我在 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 中运行。

【问题讨论】:

    标签: eclipse dll mingw eclipse-cdt


    【解决方案1】:

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

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

    有 gcc 4.7.4 here 甚至 4.8.0 here

    【讨论】:

    • 同意,如果 mingw 不支持,mingw-w64 可以。 +1 直接链接。
    【解决方案2】:

    您可以从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 来提供上述评论中提到的输出。

    【讨论】:

      【解决方案3】:

      你可以设置-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++ 相同)

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

      【讨论】:

      • 感谢您的回复,我试过了,但是当我想构建时,我收到错误:“抱歉,未实现:64 位模式未编译”。那么有没有办法让 mingw32 运行 64 位模式?
      • 我明白了,但是你可以使用 Mingw 的 64 位分支:MinGW-w64。这是官方网站:mingw-w64.sourceforge.net。但是 Golgauth 已经发布了下载链接。
      猜你喜欢
      • 1970-01-01
      • 2015-01-07
      • 2013-06-08
      • 1970-01-01
      • 2021-12-01
      • 2013-06-13
      • 1970-01-01
      • 2010-12-01
      • 2012-06-06
      相关资源
      最近更新 更多