Namazu-users-ja(旧)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: __APPLE__ (patch) Re: make error on Mac OS X



寺西です。

藤原 誠 / Makoto Fujiwara wrote:
> 
> 寺> な getopt を使うとなっています。しかし、MacOS X ではどうやら
> 寺> システムの getopt を認識できない(または仕様にあわない)ため、
> 寺> Namazu ローカルな getopt を使おうとするのだが、システムの
> 
> ある意味で、もっと単純なことのようです。人に聞いた話なのですが、

書き方が悪かったかもしれませんが、本質的には同じ話です。
システムの getopt が悪さをするという抽象的な表現が、名前の重複に
よってリンクできないという話です。

システムの getopt を認識できない(または仕様にあわない)という
抽象的な表現は、_GETOPT_H を定義されない(していない)という
話になります。

> dynamic library は、普通なら、最初に見つかった方を使ってくれる
> るので、名前が重複していても、探索順さえ注意していれば良い。
> しかし MacOS X の場合は全てを見渡してから、これを使うと決める
> ので、名前の重複を許さない。

たぶんスタテックリンクでも同じでしょう。
また、多くの処理系では少なくとも重複している場合、ワーニング
ぐらいは出すものです。
もしかすると MaxOS X にもエラーにせずにリンクできるオプションが
あるのかもしれませんが、その存在を確認していませんので、ここでは
できないものとします。
重複を許さないという実装は、それはそれで正しいとは思いますし、
アプリケーションを作る側としては、重複しないように作るべき
(作るのが望ましい)だと思います。

問題点は、それと何故 システムの getopt を認識できないのか
(_GETOPT_H が未定義なのか)というところの 2 点です。システムの 
getopt を正しく認識して、それを使うという解決方法でも良いわけ
ですから。
# _GETOPT_H を定義するだけで、うまくコンパイルできるかどうか
# は、未確認。さすがにそんなに単純ではないかもしれない。

> 寺> MacOS X で問題になったので、lib/getopt* は他の場所に移動して、
> ..
> 寺> src/* では、_nmz_* を使って呼び出すようにするというのが良いように
> 
> この場合、nmz とは少し違うようなので、compat/ とか lib-compat/
> とかにするのでしょうか

グローバル変数名を変えてしまうので、もはや Namazu ローカルなもの
ですから compat とも違うので、lib/ から移動しましょうということです。
-- 
=====================================================================
寺西 忠勝(TADAMASA TERANISHI)  yw3t-trns@xxxxxxxxxxxxxxx
http://www.asahi-net.or.jp/~yw3t-trns/index.htm
Key fingerprint =  474E 4D93 8E97 11F6 662D  8A42 17F5 52F4 10E7 D14E