2016-04-28 15 views
0

私はjniライブラリを作ろうとしていますが、makeファイルは私が実際に理解していない奇妙なエラーを出します。JNI makeファイルが機能していません。複数の定義

/tmp/ccPWlMuy.o: In function `Java_GameLogic_setMap': 
GameLogic.c:(.text+0x0): multiple definition of `Java_GameLogic_setMap' 
/tmp/ccajmgva.o:GameLogic.c:(.text+0x0): first defined here 
/tmp/ccPWlMuy.o: In function `Java_GameLogic_hello': 
GameLogic.c:(.text+0x1c): multiple definition of `Java_GameLogic_hello' 
/tmp/ccajmgva.o:GameLogic.c:(.text+0x1c): first defined here 
collect2: ld returned 1 exit status 
make: *** [GameLogic.o] Error 1 

とメイクファイルは次のとおりです。

# Define a variable for classpath 
CLASS_PATH = . 

# Define a virtual path for .class in the bin directory 
vpath %.class $(CLASS_PATH) 

all : libGameLogic.so 

# [email protected] matches the target, $< matches the first dependancy 
libGameLogic.so : GameLogic.o 
    gcc -W1 -shared -o [email protected] $< 

# [email protected] matches the target, $< matches the first dependancy 
GameLogic.o : GameLogic.c GameLogic.h 
    gcc -fPIC -I /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.38.x86_64/include -I /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.38.x86_64/include/linux -shared GameLogic.c -o libGameLogic.so Map.c GameLogic.c 

GameLogic.h: GameLogic.class PlayGame.class Bot.class 
    javah -classpath $(CLASS_PATH) GameLogic 

GameLogic.class: GameLogic.java 
    javac *.java  

PlayGame.class: PlayGame.java 
    javac *.java 

Bot.class: Bot.java 
    javac *.java 

clean : 
    rm GameLogic.o libGameLogic.so 

は私が入力し、メイクファイルを実行するには、端末に作成し、これは、それが作成するエラーです。このためには、JNIが別のcファイルのメソッドを呼び出すc呼び出しを行うようにする必要があります。

だから、Javaの< - > JNI < - > GameLogic < - >地図

そのためには。

アドバイスはありがとうございました。


gcc -fPIC -I /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.38.x86_64/include -I /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.38.x86_64/include/linux -shared -o libGameLogic.so Map.c GameLogic.c 
Map.h:7: warning: array ‘name’ assumed to have one element 
Map.h:10: warning: array ‘map’ assumed to have one element 
gcc -W1 -shared -o libGameLogic.so GameLogic.o 
gcc: GameLogic.o: No such file or directory 
gcc: no input files 
make: *** [libGameLogic.so] Error 1 
-bash-4.1$ 

My file system

答えて

0

あなたはこのラインで二回GameLogic.cをコンパイルとリンクされています

# [email protected] matches the target, $< matches the first dependancy 
GameLogic.o : GameLogic.c GameLogic.h 
    gcc -fPIC -I /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.38.x86_64/include 
    -I /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.38.x86_64/include/linux 
    -shared GameLogic.c -o libGameLogic.so Map.c GameLogic.c 
+0

今、私は疑問 –

+0

オーケーに変更されている新しいエラーを持っています。私の答えを変えずに、この同じ行を見てください。あなたは '-o libGameLogic.so'を指定しました。代わりに 'GameLogic.o'を作りますか? – Nayuki

関連する問題