2017-07-17 1 views
0

Ich versuche LibSourcey zu verwenden, um den Webrtc Streaming Server zu verwenden.Libsourcey fehlt -fPIC Kompilierungsfehler

Die Sache ist, dass ich nicht scheinen kann, damit es funktioniert. Ich hatte Probleme, das Projekt auf meinem Ubuntu 16.04 (Regexp in cmake-Dateien) zu cmake, aber jetzt ist es behoben. Das Problem, das ich habe ist eigentlich ein gemeinsames Objekt Fehler bei der Zusammenstellung Zeit:

usr/bin/ld: /home/kimmie/ffmpeg_build/lib/libswresample.a(options.o): 
relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; 
recompile with -fPIC 

/home/kimmie/ffmpeg_build/lib/libswresample.a: error adding symbols: Bad value 
collect2: error: ld returned 1 exit status 

av/CMakeFiles/av.dir/build.make:783: recipe for target 'av/libscy_av.so.1.0.2' failed 

Jede Hilfe sehr geschätzt werden würde, wie ich weiß nicht, was jetzt zu tun.

Antwort

2

Ich traf diesen gleichen Fehler auf Ubuntu 16.04.

Ich endete FFPeg mit Flags neu kompilieren, um die gemeinsam genutzten Bibliotheken zu erstellen. Im Anschluss an die Code-Beispiel Boxen im FFmpeg Compilation Guide, habe ich die folgenden zwei Fahnen auf die configure Linien, wo anwendbar:

  • --enable-pic

  • --enable-shared

Ich entfernte die --disable-shared Flags auch.

Ich fügte --enable-pic und --enable-shared zu jeder Komponente hinzu und entfernte das Flag, wenn es eine Nachricht zurückgab, dass es für diese Komponente nicht erkannt wurde. Mindestens libx264, libfdk-acc und libmp3lame benötigt --enable-shared. Und dann für die endgültige FFmpeg (Kopieren und Einfügen von FFmpeg Anleitung zum oben verlinkten):

PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure \ 
--prefix="$HOME/ffmpeg_build" \ 
--pkg-config-flags="--static" \ 
--extra-cflags="-I$HOME/ffmpeg_build/include" \ 
--extra-ldflags="-L$HOME/ffmpeg_build/lib" \ 
--bindir="$HOME/bin" \ 
--enable-gpl \ 
--enable-libass \ 
--enable-libfdk-aac \ 
--enable-libfreetype \ 
--enable-libmp3lame \ 
--enable-libopus \ 
--enable-libtheora \ 
--enable-libvorbis \ 
--enable-libvpx \ 
--enable-libx264 \ 
--enable-libx265 \ 
--enable-nonfree \ 
--enable-pic \ 
--enable-shared 

Beachten Sie die letzten beiden Zeilen in meinem Beispiel sind anders als die FFmpeg Führung.

Nachdem Sie all das getan haben, ist es wahrscheinlich am besten, die Libsourcey-Quelle und den Build-Ordner zu löschen und von vorne anzufangen.

Ich brauchte ungefähr 4-5 Tage um Libsourcey mit FFmpeg und WebRTC Abhängigkeiten zu kompilieren und erfolgreich zu erstellen. Ich habe auch ein paar andere Probleme, also pass auf, wenn du andere Fragen hast. Hinweis: Ich bin kein Entwickler von Linux und nicht auf allen Konzepten solide. das ist genau das, was für mich funktioniert hat und vielleicht wird es für dich funktionieren.

0

Sie haben einen Verknüpfungsfehler, keinen Kompilierungsfehler. Sie haben keinen Fehler gefunden, Sie haben gerade eine Verbindung versucht, die nicht funktionieren kann.

Sie versuchen, eine gemeinsam genutzte Bibliothek libscy_av.so zu erstellen. Alle Objekt Dateien, die in einer gemeinsam genutzten Bibliothek verknüpft sind, müssen aus bestehen. Um eine solche Objektdatei mit gcc zu generieren, kompilieren Sie mit der Option -fPIC.

Der Linker erkennt, dass Ihre gemeinsam genutzte Bibliothek die Objektdatei options.o erfordert, die ein Mitglied der statischen Bibliothek libswresample.a ist. Es stellt dann fest, options.o ist nicht PIC, und so kann nicht in eine gemeinsame Bibliothek verknüpft werden. Die Verknüpfung schlägt fehl und der Linker weist Sie darauf hin, dass options.o mit der Compileroption neu kompiliert werden muss.

Um diesen Ratschlag zu erfüllen, müssten Sie die statische Bibliothek libswresample.a aus der Quelle neu erstellen, wobei -fPIC den Compiler-Flags hinzugefügt wird.

Sie könnten das tun, aber es ist ungewöhnlich für Objektdateien in einer statischen Bibliothek zu PIC, und es gibt eine einfachere Option. Ihr Fehler war in Verbindung mit die statische Version libswresample (libswresample.a) anstelle der gemeinsamen Version (libswresample.so), die PIC sein wird. Korrigiere diesen Fehler einfach. Wenn Sie libswresample.a von einem Entwicklerpaket installieren, das von Ihrem Paketmanager bereitgestellt wird, wird es auch libswresample.so bereitstellen. Wenn Sie libswresample aus Quelle erstellt haben, wird das Build-System auch beide erstellen.