2013-06-06 14 views
7

Windows 7の64ビット版にMingw 4.7.2の32ビットバージョン(インストーラを使用)をインストールしました。 Eclipse C++プロジェクトでMinGWを使用して、.dllファイルを作成します。これまでのところすべてが機能します。EclipseでMinGW 32ビットを使って64ビット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の設定を調整する必要がありますか?

よろしくマルク・

編集:あなたが以下のコメントに見ることができるように、私はすでに64ビットのDLLをビルドするには、-m64フラグを設定しようとしました。その結果、エラーは"sorry, unimplemented: 64-bit mode not compiled in"になります。 mingw32で64ビットモードを実行する方法があります。

答えて

7

私は最近、私のため-m64フラグを有効にMinGW-64バージョンをインストールし、同じ問題に直面しました。 hereから自動ビルドを取得できます。

EDIT:

GCC 4.7.4 hereとさえ4.8.0 hereあります:はいくつかの男(rubenvb)はPersonal Buildsでいくつかの良い仕事をしました。

+0

mingwがそれをサポートしていない場合、mingw-w64は同意します。直接リンクの場合+1。 – ollo

+0

Btw。すでに4.7.2がありますか?ダウンロードは4.7.0です。 – ollo

+2

はいあります。私は私の答えを編集しました... –

1

-m64スイッチを設定すると、64ビットのlibをコンパイルできます。

These ‘-m’ switches are supported in addition to the above on x86-64 processors in 64-bit environments.

-m32 -m64 -mx32 Generate code for a 32-bit or 64-bit environment. The -m32 option sets int, long, and pointer types to 32 bits, and generates code that runs on any i386 system.

The -m64 option sets int to 32 bits and long and pointer types to 64 bits, and generates code for the x86-64 architecture. For Darwin only the -m64 option also turns off the -fno-pic and -mdynamic-no-pic options.

The -mx32 option sets int, long, and pointer types to 32 bits, and generates code for the x86-64 architecture.

(ソース: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

+0

返信いただきありがとうございます。私はそれを試みましたが、ビルドしたい場合は、「申し訳ありませんが実装されていません:64ビットモードがコンパイルされていません」というエラーが表示されます。では、mingw32で64ビットモードを実行する方法はありますか? – Marc

+2

私は見ていますが、Mingw:MinGW-w64の64ビットフォークを使用することができます。公式ウェブサイトはhttp://mingw-w64.sourceforge.net/です。しかし、Golgauthはすでにダウンロードリンクを投稿している。 – ollo

5

http://tdm-gcc.tdragon.net/から簡単に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と指定すると、上のコメントで説明したように出力が得られます。

関連する問題