2016年5月8日日曜日

Ubuntuにおける算術演算子のエラー(C言語)

Ubuntuにおいてgccでリンクオプションを使う場合に気をつけること

#include 
#include 

#define LEN 10

int main() {

 int i;

 for(i = 0; i <= LEN; i++) {
  printf("%d = %f\n", i, sqrt((double)i));
 }

 return 0;
}

Cで算術演算子を使用する時にコンパイルできない場合リンクオプションを指定してコンパイルすればいいのですが、 Ubuntuにおいて算術演算子を使用した時に、-lmオプションを使用しても

$ gcc -lm -o sqrt sqrt.c

 `sqrt' に対する定義されていない参照です
というエラーが出る場合があります。

この場合gccでは-lオプションは最後に付けることでコンパイルできました。

$ gcc -o sqrt sqrt.c -lm

他のディストリビューションでは前につけてもコンパイルできたのですがUbuntuでは位置も関係有るようです。

2016年4月2日土曜日

WindowsでApacheを立ち上げようとしたらエラーが出た場合

Apacheのエラーログ


久しぶりにWindowsにインストールしてあるローカルサーバーを立ち上げようとしたら。こんなエラーがでました。

Error: Apache shutdown unexpectedly.
This may be due to a blocked port, missing dependencies,
improper privileges, a crash, or a shutdown by another method.

ポートがブロックされている可能性があるということでコマンドプロンプトから使用ポートを確認。

> netstat -nao

 プロトコル  ローカル アドレス      外部アドレス           状態            PID
 TCP         0.0.0.0:80             0.0.0.0:0              LISTENING       4



[ctl]+[shift]+[esc]キーでタスクマネージャーを起動してPID 4を使用しているプロセスを確認。

どうやら「System」が使用しているよう。
説明を見ると「NT Kernel & System」とあり、複数のサービスを管理しているのですべて止めると影響が大きそう。

バージョンにより使うポートに違いがありますが

IIS
SQL Server Reporting Service
Web Deployment Agent Service
Windows Remote Management

などが候補にあがりました。自分のケースではSQL Server Reporting Serviceが80番ポートを占有していました。サービスを停止しApacheの起動ができるのを確認。

それぞれ必要ないサービスか確認してから止めましょう。