Ich versuche, das folgende Makefile für JNI in Eclipse auf Ubuntu 14,04Verschiebung R_X86_64_32S gegen `.rodata 'kann nicht verwendet werden, wenn ein gemeinsames Objekt erstellt wird; neu kompiliert mit -fPIC
CLASS_PATH = ../bin
vpath %.class $(CLASS_PATH)
all : libSend.so
libSend.so : Send.o
gcc -fPIC -shared -o [email protected] $<
Send.o : Send.c Send.h
gcc -fPIC -I"/usr/lib/jvm/java-8-openjdk-amd64/include" -I"/usr/lib/jvm/java-8-openjdk-amd64/include/linux" -c $< -o [email protected]
Send.h : Send.class
javah -classpath $(CLASS_PATH) $*
clean :
rm Send.h Send.o libSend.so
Wenn ich versuche zu bauen diese Make-Datei auszuführen. Ich erhalte den folgenden Fehler:
make all
javah -classpath ../bin Send
gcc -fPIC -shared -o libSend.so Send.o
/usr/bin/ld: Send.o: relocation R_X86_64_32S against `.rodata' can not be used when making a shared object; recompile with -fPIC
Send.o: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
make: *** [libSend.so] Error 1
Bitte helfen Sie mir, dieses Problem zu lösen.
Warum versucht man nicht, 'Send.o' zu erstellen? Wird mit 'javah' 'Send.h' im aktuellen Verzeichnis erstellt? Was gibt 'make -d' aus? –
Haben Sie versucht, 'sauber zu machen; alles machen? –
@EtanReisner * Warum versucht man nicht, 'Send.o' zu erstellen? * Weil es schon da ist und nicht neu kompiliert wird, außer' Send.c' oder 'Send.h' zu ändern, da dies die einzigen Abhängigkeiten sind, die im Makefile. –