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 を使用して三角形を実装する一般的な手法 (複数の方法)

推薦する

MySQL に大量のデータを挿入する 4 つの方法の例

序文この記事では主に、MySQLに大量のデータを挿入する4つの方法を紹介し、参考と学習のために共有し...

入力が正しいにもかかわらず、MySQL 8.0 でアクセスが拒否される問題を解決する

最近、MySQL を学び始めました。インストールはスムーズに進み、インターネット上の既成のチュートリ...

Linuxで同一ファイルを見つける方法

コンピュータを使用すると、システム内に大量のゴミが生成されます。最も一般的なケースは、同じファイルが...

MySQL 5.7.18 MSI インストール グラフィック チュートリアル

この記事では、参考までにMySQL 5.7.18 MSIインストールチュートリアルを紹介します。具体...

モバイルブラウザが位置をサポートしない場合の解決策: 修正

具体的な方法は以下の通りです。 CSSコードコードをコピーコードは次のとおりです。 .wap_bot...

background-positionプロパティでのパーセンテージ値の使用法の検討

背景位置が背景画像の表示に与える影響この2日間のプロジェクトでホームページの写真を入れ替えていたとこ...

MySQL 8.0 パスワード有効期限ポリシーの詳細な説明

MySQL 8.0.16 以降では、パスワードの有効期限ポリシーを設定できます。今日は、この小さな知...

MySQL InnoDB 監視 (システム層、データベース層)

MySQL InnoDB 監視 (システム層、データベース層) MySQL の監視に関しては、My...

VUEはFlappy Birdゲームのサンプルコードを実装します

Flappy Bird は、誰もがアプリでプレイしたことがある非常にシンプルな小さなゲームです。ここ...

nginx を介して方向プロキシを実装するプロセスの図

この記事は主に、nginx を介して方向プロキシを実装するプロセスを紹介します。この記事のサンプル ...

図を使ってWeb2.0とは何かを説明する

最近はWeb2.0という言葉をよく耳にしますが、Web2.0とは何でしょうか? Web 1.0 とど...

JS を使用して航空機戦争の小さなゲームを実装する

この記事の例では、参考のために航空機戦争ゲームを実装するためのJSの具体的なコードを共有しています。...

MySQL でパーセンテージと最初の数パーセントを表示する方法

目次必要とする実装コードデータベース数日前、友人からこれを書くのを手伝ってほしいと頼まれました。ただ...

HTML相対パスの親ディレクトリと子ディレクトリの書き方

親ディレクトリを指定する方法../ はソース ファイルの親ディレクトリを表し、../../ はソース...

JS はシンプルな todoList (メモ帳) 効果を実装します

メモ帳プログラムは、HTML + CSS + JavaScript の 3 つの主要なフロントエンド...