質問: solaris 10、apacheを実行しようとすると:ld.so.1:httpd:致命的な再配置エラー ラボで本番ボックスを複製しようとしています。apacheをインストールし、本番環境からコピーした構成を使用しようとすると、次のエラーが表示されます。 [root @ hnm] /usr/local/apache2/bin$./apachectl -k start -f/usr/local/apache2/conf/hdm /httpd.conf httpd:/ usr/local/apache2の939行目の構文エラー/conf/hdm/httpd.conf:/usr/local/apache2/conf/hdm/modules.confの29行目の構文エラー:/ usr/local/apache2/modules /mod_cwmp_22.soをサーバーにロードできません:ld.so .1:httpd:致命的:再配置エラー:ファイル/ usr/local/apache2 /modules/mod_cwmp_22.so:シンボルcurl_easy_init:参照されたシンボルが見つかりません
回答: エラーメッセージを分解しましょう: /usr/local/apache2/modules/mod_cwmp_22.soをサーバーにロードできません: まあ、明らかです。 ld.so.1:httpd:致命的:再配置エラー: ld.so.1はランタイムダイナミックローダーです。動的にリンクされている(そしてsolarisではすべてが動的にリンクされている)アプリを起動すると、動的ローダーはすべてのライブラリを取り込む必要があります。また、すべてのファイルがあるだけでなく、コードとデータの両方のすべての参照をリンクしていることを確認する必要があります。 ファイル/usr/local/apache2/modules/mod_cwmp_22.so:シンボルcurl_easy_init:参照されているシンボルが見つかりません さて、ここに行きます。ダイナミックローダーは、curl(libcurl)に依存するcwmpモジュールを導入しました。 libcurl.soが見つかったようです(そうでない場合は別のエラーが表示されます)が、特定のシンボルが見つかりません。つまり、cwmpモジュールが関数呼び出しcurl_easy_initを必要としていることを認識していますが、それを見つけることができません。私の推測では、libcurlのバージョンが一致していません。 webサーバーモジュールはlibcurlの1つのバージョンに対して構築されましたが、現在、開発ボックスで別のバージョンに対して実行しようとしています。libcurlのバージョンを確認します。多分strings -a devとprodの両方のlibcurlで、それらが一致していることを確認します。これらを検証するために使用できるreadelfのような他のツールがありますが、私の大きな推測では、prodからlibcurlをコピーして、それを表示できるdevのどこかに配置できます。