Problem mit der Kompilierung des Nginx RTMP-Moduls in der Arm-Version

Problem mit der Kompilierung des Nginx RTMP-Moduls in der Arm-Version

Ich habe heute einen ganzen Tag daran gearbeitet und schließlich Nginx kompiliert, um Unterstützung für das RTMP-Modul hinzuzufügen. Dabei bin ich auf viele Probleme gestoßen. Ich habe diesen Artikel aufgezeichnet und hoffe, dass er Schülern helfen kann, die auf solche Probleme stoßen.

1. Vorbereitung:

1. Laden Sie den Nginx-Quellcode herunter: wget http://xiazai.jb51.net/202112/yuanma/nginx_jb51.rar

2. Laden Sie den Quellcode der abhängigen Bibliothek libpcre.a herunter: wget http://ftp.cs.stanford.edu/pub/exim/pcre/pcre-8.39.tar.gz

3. Laden Sie den Quellcode der abhängigen Bibliothek libz.a herunter: wget http://xiazai.jb51.net/202112/yuanma/pcre_jb51.rar

4. Laden Sie den Quellcode des RTMP-Moduls herunter: GitHub - arut/nginx-rtmp-module: NGINX-basierter Media-Streaming-Server

Nachdem der Quellcode der ersten drei Bibliotheken heruntergeladen wurde, werden sie alle dekomprimiert.

2. Quellcode-Kompilierung

Die pcre-Bibliothek und die libz-Bibliothek müssen nicht separat kompiliert werden. Sie werden beim Hinzufügen von Modulen beim Kompilieren von nginx zusammen kompiliert.

1. Konfigurieren

cd nginx-1.20.2 //Wechseln Sie zum Nginx-Quellverzeichnis./configure --prefix=/usr/sbin --add-module=/home/tianyexing/Documents/tools/nginx_rtmp/nginx-rtmp-module-master --with-http_ssl_module --with-debug --with-pcre=/home/tianyexing/Documents/tools/pcre/pcre-8.39 --with-zlib=/home/tianyexing/Documents/tools/zlib/zlib-1.2.11
 
// --prefix=/usr/sbin gibt das Installationsverzeichnis an. Das während der endgültigen Installation generierte Programm wird in diesem Verzeichnis abgelegt. // --add-module=/home/tianyexing/Documents/tools/nginx_rtmp/nginx-rtmp-module-master kompiliert das rtmp-Modul. Dies ist das Verzeichnis, in das der Quellcode nach dem Herunterladen oben entpackt wird. // --with-pcre=/home/tianyexing/Documents/tools/pcre/pcre-8.39 kompiliert das pcre-Modul. Dies ist das Verzeichnis, in das der Quellcode nach dem Herunterladen oben entpackt wird. // --with-zlib=/home/tianyexing/Documents/tools/zlib/zlib-1.2.11 kompiliert das zlib-Modul. Dies ist das Verzeichnis, in das der Quellcode nach dem Herunterladen oben entpackt wird.

Da ich die arm-himix200-linux-Version kompilieren möchte, aber die Konfiguration im Nginx-Quellverzeichnis --host nicht unterstützt, verwende ich

--with-cc=arm-himix200-linux-gcc schlägt ebenfalls fehl, Sie können es also nur manuell ändern (die Änderungspunkte werden weiter unten erläutert). Nach der Ausführung werden Objekte und Makefile im aktuellen Verzeichnis generiert.

1) Ändern Sie objs/Makefile

2) Ändern Sie die Datei nginx-1.20.2/auto/cc/conf beispielsweise:

3) Ändern Sie nginx-1.20.2/auto/types/sizeof, beispielsweise:

Sie können nach weiteren Änderungen suchen, da ich mich an mehrere davon nicht erinnern kann.

2. Kompilierungsfehler

Machen Sie es einfach im Nginx-Quellverzeichnis, da es objs/Makefile ausführt

1) Die Header-Datei openssl/ssl.h kann nicht gefunden werden, beispielsweise:

Das System verfügt bereits über die Datei openssl/ssl.h, die sich im Systemverzeichnis /usr/include befindet.

Beim Kompilieren wird jedoch angezeigt, dass es nicht gefunden werden kann. Ich weiß nicht, ob dies mit dem Kompilieren der Arm-Version zusammenhängt. Da ich zufällig die OpenSSL-Headerdatei dieser Arm-Version habe, habe ich mir hier nicht die Mühe gemacht und das OpenSSL-Verzeichnis von woanders kopiert und direkt verwendet. Nach dem Hinzufügen des Header-Dateiverzeichnisses müssen Sie jedoch objs/Makefile ändern. Mein neu hinzugefügtes Header-Dateiverzeichnis befindet sich im Nginx-Quellcodeverzeichnis src und die Änderung lautet wie folgt:

Dieses CORE_INCS ist die Header-Datei, die zum Kompilieren von nginx verwendet wird.

Dies ist das Header-Dateiverzeichnis, das von anderen Modulen, nginx-rtmp, pcre und zlib verwendet werden kann.

2) IPv6-Probleme

Es wird angezeigt, dass diese Definition nicht gefunden werden kann, aber diese Definition existiert im System. Hier besteht kein Grund zur Sorge. Da IPv6 nicht verwendet wird, wird der entsprechende Code auskommentiert.

3) Das Archiv hat keinen Index. Führen Sie ranlib aus, um einen hinzuzufügen ---- Problem mit der Nichtübereinstimmung der Bibliotheksplattform

Da es viele Male kompiliert wurde, wurden sowohl die x86-Version als auch die Arm-Version kompiliert, und dann gibt es kein Make Clean. Hier wird die vorherige x86-Version der Bibliothek verwendet, daher wird hier ein Fehler angezeigt, da ich die Arm-Himix200-Linux-Version kompilieren möchte. Überprüfen Sie die Bibliotheksinformationen wie:

Sie müssen also „clean“ ausführen und dann die obige Konfiguration ausführen, um das Makefile neu zu generieren.

4) SSL-Bibliothek und Krypto-Bibliothek können nicht gefunden werden

Es gibt die folgenden Links in objs/Makefile

Fehler im letzten Link

Ich habe diese ARM-Version der Bibliothek zuvor kompiliert und sie dann direkt in einen absoluten Pfad geändert. Wenn Sie diese beiden Bibliotheken nicht haben, googeln Sie sie.

Endlich habe ich meine Arm-Version und meine x86-Version kompiliert.

3. Umsetzung auf dem Zielbrett

Beim Kopieren in die Arm-Version zur Ausführung schlug es fehl, aber es gab keine Aufforderungsmeldung. Als Ergebnis gab nginx -s reload eine Fehlermeldung aus, wie etwa:

Weil während der Konfiguration das Installationsverzeichnis --prefix=/usr/sbin angegeben wird. Nach Abschluss der Kompilierung werden drei neue Verzeichnisse sbin, conf und logs unter /usr/sbin erstellt. Die Verzeichnisse lauten wie folgt:

Also habe ich die entsprechenden Verzeichnisse sbin, conf und logs auf dem Arm-Board erstellt und alle Dateien aus diesen Verzeichnissen dorthin kopiert. Das Ergebnis war erfolgreich:

Es wurde festgestellt, dass es auf Port 1935 lauscht.

Die ARM-Version wurde bereits kompiliert, konnte jedoch ebenfalls nicht erfolgreich ausgeführt werden, da der während der Konfiguration per Präfix angegebene Installationspfad ein Verzeichnis auf dem PC ist und das Ergebnis der oben beschriebene open()-Fehler ist. Wenn das durch --prefix angegebene Verzeichnis während der Konfiguration auf der Zielplatine nicht vorhanden ist, schlägt der Vorgang fehl. Wie kann dies geändert werden? Ich habe es noch nicht gefunden. Wenn es jemand weiß, lassen Sie es mich bitte wissen.

Dies ist das Ende dieses Artikels zum Kompilieren der Arm-Version des Nginx-RTMP-Moduls. Weitere relevante Inhalte zum Nginx-RTMP-Modul finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Nginx verwendet das Modul nginx-rtmp-module, um die Live-Broadcast-Raumfunktion zu realisieren

<<:  Eine kurze Analyse der Verwendung des HTML-Webpack-Plugins

>>:  Eine gängige Technik zur Implementierung von Dreiecken mit CSS (mehrere Methoden)

Artikel empfehlen

Tiefes Verständnis des Mechanismus des CSS-Hintergrund-Blend-Modus

Dieser Artikel darf gerne geteilt und zusammengef...

So löschen Sie eine Eigenschaft eines Objekts in JavaScript

1. löschen delete ist die einzige wirkliche Mögli...

Methoden und Schritte zum Bereitstellen mehrerer War-Pakete in Tomcat

1 Hintergrund JDK1.8-u181 und Tomcat8.5.53 wurden...

Vue+thinkphp5.1+axios zum Realisieren des Datei-Uploads

In diesem Artikel erfahren Sie, wie Sie mit think...

Verwendung des Node.js-HTTP-Moduls

Inhaltsverzeichnis Vorwort HTTP HTTP-Server Datei...

Erläuterung der Array-Verarbeitung in React und Redux

Dieser Artikel stellt einige häufig verwendete Fu...

Der einfachste Weg zum Debuggen gespeicherter Prozeduren in MySQL

Ein Kollege hat mir einmal gesagt, ich solle eine...