2

私は、Minecraft をネイティブ バイナリにコンパイルしようと決めていました。

そのために私は以下を使用しました(おおよそ、最適化は異なる場合があります):

gcj -c -O2 -fjni -findirect-dispatch ./minecraft.jar &
gcj -c -O2 -fjni -findirect-dispatch ./jinput.jar & 
gcj -c -fjni -findirect-dispatch ./lwjgl.jar &
gcj -c -fjni -findirect-dispatch ./lwjgl_util.jar &

次に、リンクを試みました:

gcj -o mc_out -findirect-dispatch -fjni -L/natives/*64.so \
    -L/usr/lib/jvm/java-1.5.0-gcj-4.4/jre/lib/amd64/server \
    ./*.o -ljvm \
     --main=net.minecraft.client.Minecraft

しかし、バイナリを実行すると、次のようになります。

ryan@ryan ~/.minecraft/bin_native_test $ ./mc_out
libgcj failure: gcj linkage error.
Incorrect library ABI version detected.  Aborting.

Aborted

今、私は代わりに使用します:

gcj -o mc_out -findirect-dispatch -fjni -L/natives/*64.so ./*.o \
    --main=net.minecraft.client.Minecraft

私は得る:

ryan@ryan ~/.minecraft/bin_native_test $ ./mc_out
Exception in thread "main" java.lang.ExceptionInInitializerError
   at java.lang.Class.initializeClass(libgcj_bc.so.1)
   at org.lwjgl.LWJGLUtil.getPlatform(mc_out)
   at org.lwjgl.Sys.createImplementation(mc_out)
   at org.lwjgl.Sys.<clinit>(mc_out)
   at java.lang.Class.initializeClass(libgcj_bc.so.1)
   at org.lwjgl.Sys.getTime(mc_out)
   at net.minecraft.client.Minecraft.F(mc_out)
   at net.minecraft.client.Minecraft.main(mc_out)
Caused by: java.nio.InvalidMarkException
   at java.nio.Buffer.reset(libgcj_bc.so.1)
   at java.nio.DirectByteBufferImpl.duplicate(libgcj_bc.so.1)
   at java.nio.DirectByteBufferImpl.asReadOnlyBuffer(libgcj_bc.so.1)
   at org.lwjgl.LWJGLUtil.loadIcon(mc_out)
   at org.lwjgl.LWJGLUtil.<clinit>(mc_out)
   at java.lang.Class.initializeClass(libgcj_bc.so.1)
   ...7 more

これをどのように解決することをお勧めしますか?

4

1 に答える 1

-3

おそらくモッディングのために、マインクラフトを逆コンパイルしたいと私には思えます。もしそうなら、Minecraft Coder Pack を見てみましょう。これは、逆コンパイル、再コンパイル、再難読化を非常に簡単にする一連のプログラムです。

プログラムはこちらからご覧いただけます

ただし、改造の理由で逆コンパイルしない場合は、これを無視してください:)

于 2012-11-10T10:55:21.090 に答える