• ベストアンサー

コンパイルされたCGI(C言語)を別サーバで動かす

C言語にて簡単なCGIを作成しました。 gcc -o xxx.cgi xxx.c コンパイルをするとそのサーバでは問題なく動きます。 コンパイルしたCGIファイルを同じ環境の別サーバに 持っていくとInternalServerErrorとなり実行できません。 パーミッションもディレクトリ構造もApacheの設定も サーバ名、IPアドレスを除いて同じ設定です。 これは動作させるサーバ毎にコンパイルする必要が あるものなのでしょうか?もしサーバ毎にコンパイルする 必要があるのであればそれはどうしてなのでしょうか? もしくはなにか間違っているのでしょうか? お手数ですが、お分かりになる方、お教えください。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • selenity
  • ベストアンサー率41% (324/772)
回答No.2

厳密に言えば、サーバごとに再コンパイルが必要です。 同じバージョンのOSでも、インストール状態によってはリンクするライブラリがインストールされない場合もありますので。

その他の回答 (2)

  • ysk6406
  • ベストアンサー率40% (237/589)
回答No.3

サーバが Apache ということで、Internal Server Error になった時には、必ずログファイルにその理由が残されているはずですが、それはチェックされましたか? そのメッセージを書いていただければ、何かお役に立てるかも知れません。 多分、OS(特にDLL)のバージョンの違い等により、ランタイムエラーが起こっているのだとは思いますが…

polco2001
質問者

補足

すいません。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を別サーバでも動作するの ものなのでしょうか? 大変お手数ですが、ご教授ください。

  • ranx
  • ベストアンサー率24% (357/1463)
回答No.1

> 動作させるサーバ毎にコンパイルする必要があるものなのでしょうか? 一般的には「OS毎に」でしょうね。

関連するQ&A