読者です 読者をやめる 読者になる 読者になる

YAMAGUCHI::weblog

土足で窓から失礼いたします。今日からあなたの息子になります。 当年とって92歳、下町の発明王、エジソンです。

CORBAを使ってみる(インストール編)

C++ Cygwin

動機

研究で急遽分散オブジェクト通信をする必要が出てきた上に,ちょうど過去にCORBAで作られたプログラムがあったのでそれを流用する形で行こうと思ったため.

方法

今回はMICO CORBAというライブラリを使ってCORBA環境を構築します.動作要件は下記の通り.

C++コンパイラGCCなら3.2以上)
flex 2.5.3(オプション)
bison 1.25(オプション)

Cygwinでこれらのパッケージは追加してあるので要件は満たしています.次にMICO CORBAのサイトからソースをダウンロードしてビルドします.

# wget http://www.mico.org/mico-2.3.12.tar.gz
# mv mico-2.3.12.tar.gz /usr/local
# cd /usr/local
# tar xzf mico-2.3.12.tar.gz
# cd mico
# ./configure
# make
../include/mico/os-misc.h:286: error: declaration of C function `int
gettimeofday(timeval*, timezone*)' conflicts with
/usr/include/sys/time.h:73: error: previous declaration `int
gettimeofday(timeval*, void*)' here

あら,エラーが出てしまった.どうしてだろう?とりあえず /usr/include/sys/time.h を見てみる.するとこんなコードを発見した.

struct timezone {
  int tz_minuteswest;
  int tz_dsttime;
};

これって"tzcode: The time zone package"ってやつと関係あるのかな?それをUninstallしたいけど,coreutilsと依存関係があるしなぁ.とりあえず分からないんで./include/mico/os-misc.hの286行目にあるgettimeofday関数をコメントアウト.この部分ですね.

#ifdef __CYGWIN32__
extern "C" int gettimeofday (struct timeval *, struct timezone *);
#endif

でもってもう一度makeする.

# make
(略)
make[1]: *** [libmicoir2.3.12.dll] Error 1

落ちやがった!今度は逆にさっきのコメントアウトを戻して,/usr/include/sys/time.hの73行目をコメントアウトする.この部分.

int _EXFUN(gettimeofday, (struct timeval *__p, void *__z));

これでもう一度makeしてみる.

# make
make[1]: *** [libmicoir2.3.12.dll] Error 1

ダメだ!なんかやたらundefined reference to xxxが出て死んだ.落ち着け,俺.とりあえずここでREADMEを読んでないことに気が付く.(遅い)しかし根本的な解決方法は見つからず,普通にconfigure, make, make installをしろとしか書いていない.とりあえずFAQ見て環境変数を設定してみる.

export PATH=/usr/local/gcc/bin:$PATH
export CXXFLAGS=-L/usr/local/gcc/lib
export LD_LIBRARY_PATH=/usr/local/gcc/lib:$LD_LIBRARY_PATH

これでmake通らなかったらもうしらないや.…で,結果だめ,と.もう一度手順をおさらいしてみよう.今までは./configureをした後にmakeして,そこでファイルを書き換えていた.そこで今度はファイルを書き換えた後に./configureをしてみることにした.変更箇所は上と同様/usr/include/sys/time.h.

# ./configure
# make
# make install
(略)
make: ldconfig: Command not found
make: [install] Error 127 (ignored)

このエラーは想定済みなので,これにてインストール完了!長かった….Macworld 2008の実況が無かったら確実に寝てた.

参考

ここではすんなりインストールが完了しているのが非常にうらめしいです.

まとめ

やっぱりうまくいかない時はうまくいかない.でもだましだまし動かしてみると意外とうまくいく.