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

在Eclipse中使用MinGW 32位构建64位dll,eclipse,dll,mingw,eclipse-cdt,Eclipse,Dll,Mingw,Eclipse Cdt,我在64位Windows 7上安装了32位版本的Mingw 4.7.2(使用安装程序)。 在Eclipse C++项目中,我使用明文来构建.dll文件。到目前为止一切正常 然而,我使用这个.dll通过JNI包含在java项目中。当我在java项目中调用.dll函数时,异常“线程中的异常”main“java.lang.unsatifiedlinkerror:D:\path\mylib.dll:无法在AMD 64位平台上加载IA 32位.dll” 被抛出。 看来我需要构建一个64位版本的DLL 因此

我在64位Windows 7上安装了32位版本的Mingw 4.7.2(使用安装程序)。 在Eclipse C++项目中,我使用明文来构建.dll文件。到目前为止一切正常

然而,我使用这个.dll通过JNI包含在java项目中。当我在java项目中调用.dll函数时,异常
“线程中的异常”main“java.lang.unsatifiedlinkerror:D:\path\mylib.dll:无法在AMD 64位平台上加载IA 32位.dll”
被抛出。 看来我需要构建一个64位版本的DLL

因此,我的问题是:

  • 我可以用MinGW 32位构建一个64位DLL,还是需要MinGW 64位版本
  • 如果是,我需要如何调整MinGW和/或Eclipse设置
  • 问候马克

    编辑:正如您在下面的评论中所看到的,我已经尝试设置-m64标志来构建一个64位dll。这导致错误:
    “抱歉,未实现:64位模式未在”
    中编译。”。
    因此,有没有一种方法可以让64位模式在mingw32中运行。

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

    在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体系结构生成代码

    (来源:)

    示例:

    32位:
    gcc-m32-o exmaple32示例.c

    64位:
    gcc-m64-o exmaple64-example.c

    (与
    g++
    相同)


    您可以在eclipse中设置它们:
    (右键单击项目)->Properties->C/C++Build->Settings
    我最近遇到了同样的问题,安装
    MinGW-64
    版本为我启用了
    -m64
    标志。您可以从中获得自动构建

    编辑:一些家伙(
    rubenvb
    )在
    个人构建中做了一些出色的工作


    还有GCC4.7.4甚至是4.8.0。

    您可以从Windows下载TDM-gcc编译器,安装非常简单

    然后,您可以运行以下命令,从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
    ,以提供上述注释中提到的输出。

    感谢您的回复,我尝试过这样做,但当我想要构建时,我得到了错误:“对不起,未实现:64位模式未在中编译”。那么,有没有办法让64位模式在mingw32上运行呢?我明白了,但是您可以使用Mingw的64位fork:Mingw-w64。这是官方网站:。但是Golgauth已经发布了一个下载链接。同意,如果mingw不支持它,mingw-w64也可以+1为直接链接。