Ich versuche, FFMPEG und Libaom anscheinend aus dem Quellcode zu kompilieren, da die gcc- und g ++ - Compiler in Ubuntu 18.04 standardmäßig standardmäßig die folgende Option aktiviert haben: --enable-default-pie
Ich habe versucht, eine zu bestehen, --extra-ldexeflags="-no-pie -fno-pic -fno-pie"aber es hat nicht geholfen. Ich habe das gleiche Problem, wenn ich versuche, libaom zu kompilieren. Ich habe versucht, eine ältere Version von gcc zu installieren, aber auch 5.X hat diese --enable-default-pieOption standardmäßig aktiviert, so dass sie nicht gut ist. Anscheinend wurde diese Option auf Ubuntu 18.04 erzwungen und es gibt keinen Weg daran vorbei.
Das ist mein Fehler beim Versuch, libaom zu installieren:
64%] Linking CXX executable examples/decode_with_drops /usr/bin/x86_64-linux-gnu-ld: libaom.a(fwd_txfm_ssse3_x86_64.asm.o): relocation R_X86_64_32 against `.rodata' can not be used when making a PIE object; recompile with -fPIC /usr/bin/x86_64-linux-gnu-ld: libaom.a(quantize_ssse3_x86_64.asm.o): relocation R_X86_64_32 against `.rodata' can not be used when making a PIE object; recompile with -fPIC /usr/bin/x86_64-linux-gnu-ld: libaom.a(subpel_variance_sse2.asm.o): relocation R_X86_64_32 against `.rodata' can not be used when making a PIE object; recompile with -fPIC /usr/bin/x86_64-linux-gnu-ld: libaom.a(highbd_subpel_variance_impl_sse2.asm.o): relocation R_X86_64_32 against `.rodata' can not be used when making a PIE object; recompile with -fPIC /usr/bin/x86_64-linux-gnu-ld: final link failed: Nonrepresentable section on output collect2: error: ld returned 1 exit status CMakeFiles/decode_with_drops.dir/build.make:155: recipe for target 'examples/decode_with_drops' failed make[2]: *** [examples/decode_with_drops] Error 1 CMakeFiles/Makefile2:936: recipe for target 'CMakeFiles/decode_with_drops.dir/all' failed make[1]: *** [CMakeFiles/decode_with_drops.dir/all] Error 2 Makefile:129: recipe for target 'all' failed make: *** [all] Error 2
Ich folgte der Ubuntu-Kompilierungsanleitung, die unter Mein Befehl veröffentlicht wurde, war jedoch etwas anders. Ich habe das ffplay deaktiviert, da ich ffmpeg auf einem Server installiere und libsrt (Haivision Secure Reliable Transport Protocol) und libaom (AV1) aktiviere. Ich habe auch den Download-Link geändert, um die stabile Version 4.0 anstelle des neuesten nächtlichen Build herunterzuladen. Dies ist mein ffmpeg-Kompilierungsbefehl:
Ich würde sagen, das gehört zu StackOverflow. Für das Kompilieren von ffmpeg ist ohnehin arkanes Wissen erforderlich.
vor 6 Jahren
0
eine Idee, wie ich es von hier nach dort verschieben kann? Als ich versuchte, einen neuen Thread in Stackoverflow zu erstellen, sagte er, dass ich nur alle 90 Minuten einen Beitrag posten kann.
Georgе Stoyanov vor 6 Jahren
0
Ich habe es für den Transfer markiert. Also warte einfach ab.
vor 6 Jahren
0
Wenn Sie nach dem Kompilieren des Programms als Benutzer und nicht als Entwickler fragen, muss dies nicht migriert werden. Das heißt, es könnte nützlich sein, wenn Sie (a) den Titel der Frage ändern, z. B. "Wie kompiliere ich FFMPEG ohne PIE?" Und (b) erklären, warum Sie PIE deaktiviert haben. Möglicherweise gibt es eine alternative Lösung (https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem).
Bob vor 6 Jahren
2
PIE ist in gcc v.5.5 voreingestellt, nicht in 5.4. ... Sie können die neue "no-pie" `gcc54-c ++ _ 5.4.0-ubuntu16_amd64.deb` für 18.04 (und 16.04) https://drive.google.com/file/d/1ptHLaZXImpeMzq4xuuGGn5VjrvxNSop3/view verwenden ? usp = sharing ... Stellt `/ usr / bin / ` zur Verfügung. Installieren Sie: `sudo gdebi Downloads / gcc54-c ++ _ 5.4.0-ubuntu16_amd64.deb`
Knud Larsen vor 6 Jahren
0
Funktioniert für mich im 18.04. Zeigen Sie Ihren `cmake'-Befehl oder die erforderlichen Informationen, um das Problem zu duplizieren.
LordNeckbeard vor 6 Jahren
0
Dank @KnudLarsen konnte ich erfolgreich ffmpeg und libaom kompilieren. Ich habe auch den Titel als "Alternativlösung" vorgeschlagen.
Georgе Stoyanov vor 6 Jahren
0
Ich musste nicht das PIE-lose `gcc 'zum Kompilieren verwenden: Ich sollte klarstellen, dass ich es gemeint habe, als ich sagte, dass es" für mich funktioniert ". Ich wollte Ihr spezifisches Problem zuerst lösen, bevor Sie Kompilieranweisungen bereitstellten (deshalb habe ich nach den von Ihnen verwendeten Befehlen gefragt, damit ich Ihr Problem replizieren kann). Wenn Sie eine Lösung gefunden haben, können Sie diese auch als Antwort hinzufügen.
LordNeckbeard vor 6 Jahren
0
2 Antworten auf die Frage
3
LordNeckbeard
Ich habe den von Ihnen befolgten Leitfaden aktualisiert, um Anweisungen für die Libaom-Kompilierung aufzunehmen, ohne dass Sie einen anderen installieren gccoder PIE-Probleme lösen müssen:
Dann kompilieren Sie ffmpegwie in der Anleitung gezeigt.
Wenn ich den libaom-Befehl verwende, den Sie in [FFmpeg Wiki: Compiling for Ubuntu] (https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu) eingegeben haben, erhalte ich eine Fehlermeldung: `error: ' AV1_COMMON 'hat kein Mitglied mit dem Namen' enhancement_layers_cnt 'operating_point> = pbi-> common.enhancement_layers_cnt`.
Georgе Stoyanov vor 6 Jahren
0
@ GeorgеStoyanov Ich kann diesen Fehler nicht wiederholen (oder ich habe ihn übersehen). Welcher Schritt in der Anleitung gibt Ihnen diese Nachricht? Ist es ein schwerwiegender Fehler?
LordNeckbeard vor 6 Jahren
0
1
Georgе Stoyanov
Das Problem war also, dass der gcc7-Compiler bereits mit eingebaut war. --enable-default-pieDie Lösung bestand also entweder darin, das gcc mit -no-pieund flag neu zu kompilieren -fno-pieoder eine Version ohne die Pie-Unterstützung zu installieren. Als Knud Larsen vorschlug, habe ich gcc-5.4.0 installiert und gcc und g ++ verlinkt, um auf diese Version zu verweisen:
und erneut kompiliert ffmpeg und dies löste mein Problem. Wenn Sie fertig sind, sollten Sie Ihre gccund g++die neueste Version, die Sie installiert haben, erneut verknüpfen. In meinem Fall war dies 7.