今日は一日中作業して、ついに 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 を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: HTML webpackプラグインの使用に関する簡単な分析
>>: CSS を使用して三角形を実装する一般的な手法 (複数の方法)
コードをコピーコードは次のとおりです。 <フレームセット cols="*,1280,...
理由は、すべてのファイルが utf8 でエンコードされているためです。ファイルがインクルードされると...
この記事では、jsを使用してクールな花火効果を実現するための具体的なコードを参考までに共有します。具...
クエリで EXPLAIN を実行するとデータベースが変更されるかどうかを尋ねられた場合、おそらく「い...
この記事では、MySQL 8.0.16 winx64のインストールと設定の具体的な方法を記載します。...
目次ステップ1: CentOS 8でパッケージを更新するステップ2: CentOS 8にNginx ...
この記事では、MySQL 5.7 で追加された json フィールド タイプの使用方法を例を使って説...
1. [admin@JD ~]$ cd opt #ルートディレクトリにoptと入力2. [admin...
ネットで変更方法をいろいろ調べたのですが、うまくいきませんでした。後で大物から見て削除しました。フォ...
序文Linux では「すべてがファイル」であることは誰もが知っているので、ファイルのオープン状態を確...
Linux ホスト名変更コマンド1. ホスト名を一時的に変更するだけの場合は、hostname コマ...
Windows 10 で Docker コンテナのポートにアクセスできない問題を解決する (ポート ...
問題の説明MySQL の起動時にエラーが報告されます。エラー ログを確認してください。 [エラー] ...
複数の条件を持つ MySQL クエリ環境: MySQL 5.7 where ステートメントに複数の ...
zhangxinxu より https://www.zhangxinxu.com/wordpress...