- ベストアンサー
コンパイルされたCGI(C言語)を別サーバで動かす
C言語にて簡単なCGIを作成しました。 gcc -o xxx.cgi xxx.c コンパイルをするとそのサーバでは問題なく動きます。 コンパイルしたCGIファイルを同じ環境の別サーバに 持っていくとInternalServerErrorとなり実行できません。 パーミッションもディレクトリ構造もApacheの設定も サーバ名、IPアドレスを除いて同じ設定です。 これは動作させるサーバ毎にコンパイルする必要が あるものなのでしょうか?もしサーバ毎にコンパイルする 必要があるのであればそれはどうしてなのでしょうか? もしくはなにか間違っているのでしょうか? お手数ですが、お分かりになる方、お教えください。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
厳密に言えば、サーバごとに再コンパイルが必要です。 同じバージョンのOSでも、インストール状態によってはリンクするライブラリがインストールされない場合もありますので。
その他の回答 (2)
- ysk6406
- ベストアンサー率40% (237/589)
回答No.3
サーバが Apache ということで、Internal Server Error になった時には、必ずログファイルにその理由が残されているはずですが、それはチェックされましたか? そのメッセージを書いていただければ、何かお役に立てるかも知れません。 多分、OS(特にDLL)のバージョンの違い等により、ランタイムエラーが起こっているのだとは思いますが…
- ranx
- ベストアンサー率24% (357/1463)
回答No.1
> 動作させるサーバ毎にコンパイルする必要があるものなのでしょうか? 一般的には「OS毎に」でしょうね。
補足
すいません。Apacheのerror_logは以下のとおりです。 [Wed Nov 28 18:27:24 2001] [error] [client xxx.xxx.xxx.xxx] Premature end of script headers: /usr/local/apache/cgi-bin/xxx.cgi ソースはサンプルソースを使いました。 #include <stdio.h> #include <stdlib.h> char *getenvs(char *str){ char *ev; ev = getenv(str); if( ev == NULL ){ ev = "none"; } return(ev); } main(){ printf("Content-type: text/plain\n\n"); printf("SERVER_SOFTWARE = %s \n",getenvs("SERVER_SOFTWARE")); } 上記ソースを gcc -o xxx.cgi xxx.c でコンパイルしました。 OSはLinuxOSでディストリビュータ、カーネル共に同じバージョンです。 OSのバージョンが同じであればコンパイル後のCGIを別サーバでも動作するの ものなのでしょうか? 大変お手数ですが、ご教授ください。