Nginx rtmp モジュールのコンパイル ARM バージョンの問題

Nginx rtmp モジュールのコンパイル ARM バージョンの問題

今日は一日中作業して、ついに nginx をコンパイルして rtmp モジュールのサポートを追加しました。その過程で多くの問題に遭遇しました。この記事を記録しておき、このような問題に遭遇した学生の役に立つことを願っています。

1. 準備:

1. nginx ソースコードをダウンロードします: wget http://xiazai.jb51.net/202112/yuanma/nginx_jb51.rar

2. 依存ライブラリ libpcre.a のソースコードをダウンロードします: wget http://ftp.cs.stanford.edu/pub/exim/pcre/pcre-8.39.tar.gz

3. 依存ライブラリ libz.a ソースコードをダウンロードします: wget http://xiazai.jb51.net/202112/yuanma/pcre_jb51.rar

4. rtmp モジュールのソースコードをダウンロードします: GitHub - arut/nginx-rtmp-module: NGINX ベースのメディアストリーミングサーバー

最初の 3 つのライブラリのソース コードがダウンロードされた後、それらはすべて解凍されます。

2. ソースコードのコンパイル

pcre ライブラリと libz ライブラリは別々にコンパイルする必要はありません。nginx をコンパイルするときにモジュールを追加すると、一緒にコンパイルされます。

1. 設定する

cd nginx-1.20.2 //nginx ソース ディレクトリに切り替えます。/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 はインストールディレクトリを指定します。最終インストール中に生成されたプログラムは、このディレクトリに配置されます。 // --add-module=/home/tianyexing/Documents/tools/nginx_rtmp/nginx-rtmp-module-master は、rtmp モジュールをコンパイルします。このディレクトリは、上記でダウンロードしたソースコードを解凍したディレクトリです。 // --with-pcre=/home/tianyexing/Documents/tools/pcre/pcre-8.39 は、pcre モジュールをコンパイルします。このディレクトリは、上記でダウンロードしたソースコードを解凍したディレクトリです。 // --with-zlib=/home/tianyexing/Documents/tools/zlib/zlib-1.2.11 は、zlib モジュールをコンパイルします。このディレクトリは、上記でダウンロードしたソースコードを解凍したディレクトリです。

arm-himix200-linuxバージョンをコンパイルしたいのですが、nginxソースディレクトリのconfigureは--hostをサポートしていないので、

--with-cc=arm-himix200-linux-gcc も失敗するため、手動で変更することしか選択できません (変更ポイントについては後述します)。実行後、現在のディレクトリに objs と Makefile が生成されます。

1) objs/Makefileを修正する

2) nginx-1.20.2/auto/cc/conf ファイルを次のように変更します。

3) nginx-1.20.2/auto/types/sizeof を次のように変更します。

いくつかの変更は覚えていないので、他の変更を検索してみてください。

2. コンパイルエラー

objs/Makefileを実行するので、nginxソースディレクトリに作成するだけです。

1) openssl/ssl.h ヘッダー ファイルが見つかりません。例:

システムには既に openssl/ssl.h ファイルがあり、これはシステム ディレクトリ /usr/include にあります。

しかし、コンパイル時に、見つからないというメッセージが表示されます。arm バージョンのコンパイルに関係があるかどうかはわかりません。たまたまこの arm バージョンの openssl ヘッダー ファイルを持っているので、ここでは気にせず、どこか別の場所から openssl ディレクトリをコピーして直接使用しました。ただし、ヘッダー ファイル ディレクトリを追加した後、objs/Makefile を変更する必要があります。新しく追加したヘッダー ファイル ディレクトリは、nginx ソース コード ディレクトリ src にあり、変更内容は次のとおりです。

この CORE_INCS は、nginx をコンパイルするために使用されるヘッダー ファイルです。

これは、他のモジュール、nginx-rtmp、pcre、zlib で使用される可能性のあるヘッダー ファイル ディレクトリです。

2) IPv6の問題

この定義が見つからないというメッセージが表示されますが、この定義はシステム内に存在します。ここでは気にする必要はありません。ipv6 は使用されていないため、関連するコードはコメントアウトされています。

3) アーカイブにインデックスがありません。ranlib を実行してインデックスを追加します ---- ライブラリ プラットフォームの不一致の問題

何度もコンパイルされているため、x86 バージョンと arm バージョンの両方がコンパイルされており、その後 make clean がありません。ここでは以前の x86 バージョンのライブラリが使用されているため、ここでエラーが表示されます。arm-himix200-linux バージョンをコンパイルしたいので、次のようなライブラリ情報を確認してください。

したがって、make clean を実行してから、上記の configure を実行して Makefile を再生成する必要があります。

4) SSLライブラリと暗号ライブラリが見つかりません

objs/Makefileには以下のリンクがあります

最後のリンクにエラーがあります

以前、このライブラリの arm バージョンをコンパイルし、絶対パスに直接変更しました。これら 2 つのライブラリがない場合は、Google で検索してください。

ついに ARM バージョンと x86 バージョンをコンパイルしました。

3. ターゲットボード上での実行

実行のために arm バージョンにコピーすると失敗しましたが、プロンプト メッセージは表示されませんでした。その結果、nginx -s reload で次のようなエラー メッセージが表示されました。

configure 中に、インストール ディレクトリ --prefix=/usr/sbin が指定されているためです。コンパイルが完了すると、/usr/sbin の下に 3 つの新しいディレクトリ sbin、conf、logs が作成されます。ディレクトリは次のとおりです。

そこで、arm ボード上に対応する sbin、conf、logs ディレクトリを作成し、それらのディレクトリ内のすべてのファイルをそこにコピーしました。結果は成功しました。

ポート 1935 でリッスンしていることが確認されています。

arm バージョンは以前にコンパイルされましたが、configure 中にプレフィックスで指定されたインストール パスが PC 上のディレクトリであるため、正常に実行できず、結果として上記のような open() エラーが発生していました。 --prefix で指定されたディレクトリが configure 中にターゲット ボード上に存在しない場合、操作は失敗します。これを変更するにはどうすればよいですか?まだ見つけていないので、誰か知っていたら教えてください。

nginx rtmp モジュールの arm バージョンのコンパイルに関するこの記事はこれで終わりです。より関連性の高い nginx rtmp モジュールのコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Nginxはnginx-rtmp-moduleモジュールを使用してライブブロードキャストルーム機能を実現します。

<<:  HTML webpackプラグインの使用に関する簡単な分析

>>:  CSS を使用して三角形を実装する一般的な手法 (複数の方法)

推薦する

フレームセットを使用してワイドスクリーンを中央に配置するためのヒントを共有する

コードをコピーコードは次のとおりです。 <フレームセット cols="*,1280,...

IE で UTF8 エンコードされたページで行が理由もなく空白のままになり、UTF8 ページが表示されない問題の解決方法

理由は、すべてのファイルが utf8 でエンコードされているためです。ファイルがインクルードされると...

クールな花火効果を実現するjs

この記事では、jsを使用してクールな花火効果を実現するための具体的なコードを参考までに共有します。具...

explainコマンドがMySQLデータを変更する理由

クエリで EXPLAIN を実行するとデータベースが変更されるかどうかを尋ねられた場合、おそらく「い...

MySQL 8.0.16 winx64 のインストールと設定方法のグラフィックチュートリアル (win10 の場合)

この記事では、MySQL 8.0.16 winx64のインストールと設定の具体的な方法を記載します。...

CentOS 8.1 で LEMP (Linux+Nginx+MySQL+PHP) 環境を構築する (チュートリアルの詳細)

目次ステップ1: CentOS 8でパッケージを更新するステップ2: CentOS 8にNginx ...

mysql5.7 の新しい json フィールド タイプの使用例の分析

この記事では、MySQL 5.7 で追加された json フィールド タイプの使用方法を例を使って説...

Docker コンテナで DockerFile を使用して複数の Tomcat サービスをデプロイする手順

1. [admin@JD ~]$ cd opt #ルートディレクトリにoptと入力2. [admin...

Vue の自動書式設定の改行保存の詳細な説明

ネットで変更方法をいろいろ調べたのですが、うまくいきませんでした。後で大物から見て削除しました。フォ...

Linuxはlsofコマンドを使用してファイルのオープンステータスを確認します

序文Linux では「すべてがファイル」であることは誰もが知っているので、ファイルのオープン状態を確...

Linuxホスト名変更コマンドの詳しい説明

Linux ホスト名変更コマンド1. ホスト名を一時的に変更するだけの場合は、hostname コマ...

Windows 10でDockerコンテナのポートにアクセスできない問題に対する完璧な解決策

Windows 10 で Docker コンテナのポートにアクセスできない問題を解決する (ポート ...

メモリ構成が過剰でMySQLが起動できない問題の解決方法

問題の説明MySQL の起動時にエラーが報告されます。エラー ログを確認してください。 [エラー] ...

複数の条件を持つ MySQL クエリ メソッド

複数の条件を持つ MySQL クエリ環境: MySQL 5.7 where ステートメントに複数の ...

CSS プロパティ display:flow-root 宣言を 1 つの記事でマスターする

zhangxinxu より https://www.zhangxinxu.com/wordpress...