Sonstiges libnodave: Probleme mit make all unter Linux Xubuntu 16.04 64 Bit

jomatic

Level-1
Beiträge
7
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
möchte unter Xubuntu 16.04 64 Bit mit libnodave arbeiten. Hab mich an diesem Beitrag orientiert. Die folgenden Schritte sollten auf allen Linux-Systemen auf dem Terminal (bei mir bash-Shell) nachvollziehbar sein.
Code:
mkdir /tmp/test-libnodave
cd /tmp/test-libnodave
wget http://downloads.sourceforge.net/project/libnodave/libnodave/libnodave-0.8.5.tar.gz
tar -xf libnodave-0.8.5.tar.gz
cd libnodave-0.8.5
make all >../make-probleme.txt 2>&1
tail -n6 ../make-probleme.txt
führt zu folgender Ausgabe:
cc ibhsim5.o openSocket.o nodave.o -lpthread -o ibhsim5
ld -shared nodave.o setport.o openSocket.o -o libnodave.so
ld: nodave.o: relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
nodave.o: error adding symbols: Bad value
Makefile:131: recipe for target 'libnodave.so' failed
make: *** [libnodave.so] Error 1
Die Datei make-probleme.txt ist angehängt und die letzten, aus meiner Sicht relevanten Zeilen, sind im vorigen Block ausgegeben.
Hat jemand einen Tip für mich, wo die Ursache dieses Fehlers liegt und wie ich ihn beheben kann?
Gruß jomatic
 
Wenn er dir schon die Option -fPIC vorschlägt, dann würde ich es damit mal versuchen. Vielleicht ist das aktuell aus sicherheitstechnischen Gründen Vorschrift.

Dazu im makefile zumindest die eine Zeile hinter libnodave.so ändern von:
$(LD) -shared nodave.o
auf
$(LD) -shared -fPIC nodave.o

Evtl. muss die nodave.o dann auch schon mit dieser Option erzeugt werden, dann würde ich die Option generell bei den CFLAGS im makefile hinzufügen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Evtl. muss die nodave.o dann auch schon mit dieser Option erzeugt werden, dann würde ich die Option generell bei den CFLAGS im makefile hinzufügen.
Herzlichen Dank, Thomas, das ist die Lösung: In Z.16 im Makefile die Option -fPIC einfügen, die Zeile sieht dann so aus:
Code:
CFLAGS=-Wall -Winline [B]-fPIC[/B] -DLINUX -DDAVE_LITTLE_ENDIAN
Die von Dir vorgeschlagene Änderung am Ende des Makefiles ist demnach nicht mehr notwendig:
Dazu im makefile zumindest die eine Zeile hinter libnodave.so ändern von:
$(LD) -shared nodave.o
auf
$(LD) -shared -fPIC nodave.o

Hier nochmal die vollständige Lösung für die Kommandozeile, den sed-Befehl kann man wahrscheinlich eleganter gestalten: ;)
Code:
mkdir /tmp/test-libnodave
cd /tmp/test-libnodave
wget http://downloads.sourceforge.net/project/libnodave/libnodave/libnodave-0.8.5.tar.gz
tar -xf libnodave-0.8.5.tar.gz
cd libnodave-0.8.5
sed -i '16s/Winline/Winline -fPIC/'  Makefile
make all
sudo make install
Anschließend kann ein Testprogramm my_libnodave_test.c beispielsweise mit folgendem Befehl kompiliert werden:
Code:
gcc -Wall -DLINUX -DDAVE_LITTLE_ENDIAN my_libnodave_test.c -lnodave -o my_libnodave_test
 
Zurück
Oben