今日は一日中作業して、ついに 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 を使用して三角形を実装する一般的な手法 (複数の方法)
序文以前、ある会社の面接に行ったとき、面接官から「オブジェクトを深くコピーするにはどうすればよいです...
目次echartの初期化アプリベースチャートコンポーネントhtml CS app-base-char...
Rownum は、Oracle での独自の書き込み方法です。Oracle では、rownum を使用...
最近は学ぶべき知識が多すぎて、どれを先に学べばいいのかわかりません。このブログはもともとxamari...
目次1. はじめに2. コンポーネント開発1. コンポーネントの構成2. ヘッダーコンポーネントの開...
MySQL マスタースレーブ設定MySQL のマスター/スレーブ レプリケーションと読み取り/書き込...
目次1. Linuxホスト名を設定するクライアントホストを構成するサーバーホストを構成する2. ホス...
目次数学オブジェクト共通プロパティ一般的な方法Math.random()文字列メソッド長さプロパティ...
目次1. TypeScriptが古いVueプロジェクトに導入されるVue+Typescript プロ...
1. RTMP RTMP ストリーミング プロトコルは、Adobe が開発したリアルタイムのオーディ...
目次問題の説明1. 基本的な解決策2. 中間的な解決策3. 高度なソリューション4. ハードコアソリ...
ドキュメントの範囲この記事では、Firefox やその他の Gecko ベースのブラウザ、Safar...
Navicat は、データベースに接続するときにエラー 10060 および 1045 を報告します...
目次1. Tomcatを監視する方法2. Java独自の監視コマンド3. Tomcatのトラブルシュ...
Mysql の追加、削除、変更、クエリステートメントのシンプルな実装追加されたレコード: テーブル名...