[H8-ML(5500)] Re:cygwin を利用したツールの競合
From: 松園 敬二 <matsuzono_keiji@xxxxxxxxxxxxx>
Date: 2005年02月28日(月)09時09分24秒
澤口さん

まつぞの です。お返事が遅れてすみません。
# 本件に関するドキュメントが会社にしかなかったので遅れました<_o_>

Sawaguchi Yuji <issho@xxxxxxxxxxxxxxxxx> wrote:

> 澤口@一升金です。
> 
> 松園 敬二さんの<200502210248.ADF37224@xxxxxxxxxxxxxxxxxxxx>から
> >Cygwin を普通にインストールすると、レジストリを書き換えます。
> といっても
> c:\cygwin     -> /
> c:\cygwin\bin -> /usr/bin
> c:\cygwin\lib -> /usr/lib
> くらいの定義しかしてませんよ。

おっしゃるとおりです。しかし、私の利用の仕方ではそれでも問題が
起きました。状況を説明します。


c:\cygwin\bin                    # x86用cygwinディレクトリ
  |        |-- cygwin1.dll
  |            gcc.exe
  |            ld.exe
  |            as.exe
  |    
  \cross\H8\bin                      # H8 用cygwinディレクトリ
             |-- cygwin1.dll
	             h8300-hms-gcc.exe
				 h8300-hms-g++.exe
				 h8300-hms-ld.exe


もともと x86 用に cygwin を入れているような環境で、
H8用の環境を後からインストールしました。x86用とH8用で
cygwin のバージョンは異なっていました。

H8用のMakefile を書いて make.exe(x86用)を利用したとき、
"cygwin1.dll のバージョンが違う"という趣旨のエラーが起きました。
調べてみると、make.exe のバイナリに "/bin/sh", "/bin/sh.exe" と
いうように、フルパスで sh の位置を指定してありました。
cygwin の場合、マウントポイントの情報はレジストリにかかれています。

レジストリのマウントポイントを x86 用にしておくと、H8 用の実行ファイルで
動かないものが出てきます。逆のパターンも然りです。

最初は「きっとパスを切り替えれば直る」と思い、バッチファイルで
環境変数のパスを切り替えてテストしました。が、エラーが取れないので
レジストリなどいろいろ調べたところ、上記のような結論に至りました。

とはいえ、実は、「バージョンが違う cygwin を2ついれてエラーが出てない」
というような事例もあり、完全に原因解明できているわけではありません。
# ユーザが違えばよいのか?と思いましたがそうでもないようです

私の場合は、上記のところまでで原因の追求を諦め、クロス(H8)用の環境を
MinGW にする、という対処にしました。

> >どなたか良い解決法をご存知ならば、伺いたいところです。
> よい解決策かどうかは分かりませんが、cygwin環境はいくつ
> でも別ディレクトリを作れますから、
> 1プロジェクト1ディレクトリとして cygwin1.dll もそれぞ
> れ別々に置いてしまうのが早いんじゃないでしょうか。
> プロジェクトの保存や移管は tarball を作って渡すだけとな
> って簡単かも知れない。

前述のとおり、複数の cygwin1.dll がある場合、アプリケーション(make,
bash, ar, gcc などなど)に「どの cygwin1.dll を使うか」を
どうやって指示すればよいかわからないのです。

# パスではなくレジストリ(のマウントポイント)と、***.exe に
# 埋め込まれている絶対パスを使って cygwin1.dll を探している気配(未確認)


結論がすっきりしていなくてすみません。<_o_>
--
# メールアドレス変わりました!
e-mail: matsuzono_keiji@xxxxxxxxxxxxx
OGIS-RI CO., LTD.(http://www.ogis-ri.co.jp/otc/)
tel  : 03-5440-4391
fax : 03-5440-4506

スレッド概略
[4557(R)](起点)
 └[5499(U)]
   └[表示中]


投稿順に移動
[←前の記事へ(P)]
[→次の記事へ(N)]


リスト表示へ
[このスレッド(T)]
[本記事の前後(L)]