0

jni で使用するテスト dll をコンパイルしました。#include<jni.h> を除いて、実際には完全に空です。それはうまくコンパイルされます。他のすべてをコメントアウトして、機能させようとしました。私は gcc cygwin バージョンと -shared と eclipse を使用しました。

これはライブラリをロードするクラスです:

static
{
    final File f= new File(new File("res"), "mandc.dll");
    System.out.println(f.exists());
    System.load(f.getAbsolutePath());
    System.out.println("Loaded!");
}

//  public static native long mand(final double cx, final double cy,
//          final double jx, final double jy, long iter);

public static native void mand();

true が最後に出力され、エラーが true と loaded! の間にあることが証明されます。Eclipse 内から実行すると、2 つのエラー メッセージが出力されますが、インターネットはそれらが何であるかを認識していません。

メッセージ:

2 [main] javaw <random number here> exception::handle: Exception: STATUS_STACK_OVERFLOW
667 [main] javaw <random number here> open_stackdumpfile: Dumping stack trace to javaw.exe.stackdump

スタック ダンプは有益ではありません。

Exception: STATUS_STACK_OVERFLOW at eip=61157C62
eax=0001C038 ebx=49E0834C ecx=49DE2ABC edx=49E27DB4 esi=49E07B2C edi=49E27B34
ebp=49E07ACC esp=49E07AB4 program=C:\Program Files\Java\jre7\bin\javaw.exe, pid 2688, thread main
cs=001B ds=0023 es=0023 fs=003B gs=0000 ss=0023
Stack trace:
Frame     Function  Args
49E07ACC  61157C62  (49E2D000, 49E27B3A, 49E27DB4, 00000008)
49E07AFC  6106C0B5  (49E27B3A, 49E27D78, 00000008, 49E27B2C)
49E27B4C  6106C6D1  (49E27B70, 00000C90, 00000000, 49E27DB4)
49E27DEC  6100584E  (49E27EBC, 611FBAF0, 611FBAEC, 49E27E2C)
49E27E3C  61005D28  (49E27FC3, 611FBAF0, 611FBAEC, 00000001)
49E2801C  61006F07  (00000000, 49E28058, 61006990, 49E2B268)
End of stack trace

ウィキペディアのページから例を実行すると、実験も失敗します。そして、同じように失敗します。

4

1 に答える 1

0

問題が修正されました。ツールチェーンを cygwin gcc から mingw gcc に切り替えました。これをサポートするには、cygwin インストール プログラムから追加の mingw パッケージをインストールする必要がありました。

cygwin は Java と互換性がないと思います。より良いエラーメッセージがあれば幸いです。

于 2013-01-22T19:32:00.697 に答える