人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

cygwinのgccで、oracleのライブラリorasql9.libをリンクすると。
以下のような実行時エラーがでるようになってしまいました。
回避方法はないでしょうか?

4 [main] ? (828) c:\a.exe: *** fatal error - cygheap base mismatch detected - 0x6115B900/0x7CB900.
This problem is probably due to using incompatible versions of the cygwin DLL.
Search for cygwin1.dll using the Windows Start->Find/Search facility
and delete all but the most recent version. The most recent version *should*
reside in x:\cygwin\bin, where 'x' is the drive on which you have
installed the cygwin distribution. Rebooting is also suggested if you
are unable to find another cygwin DLL.

●質問者: maq
●カテゴリ:コンピュータ
✍キーワード:ALL base cygwin DELETE DLL
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● yostat
●35ポイント

念のため確認です。

呼んで字のごとしって事ではないでしょうか?

cygwin1.dll が複数あるのが問題。

対策は、cygwin1.dllを検索して最新バージョン以外をリネーム(念のためリブート)。

リンク時に参照していた cygwin1.dll と実行時に実際に使用された cygwin1.dll が異なるんでしょうね。

http://www.bookshelf.jp/2ch/tech/1058134693.html

にもそういう話が載っています。

oracle パッケージの中に cygwin が入ってたりするんですかね?

◎質問者からの返答

残念ながらcygwin1.dllはc:\cygwin\binに1つしかありません:(。


2 ● ma-kanoh
●35ポイント

http://www.sixnine.net/cygwin/translation/faq/faq_3.html

URLはどちらかというとダミーです。(参考にはなるけど)

問題は1つしかないcygwin1.dllがorasql9.libに

書いてあるエントリポイントとあっていないことなのでは。

たとえばorasql9.libにはcygwin1.dll->0x6115B900の

関数に飛んでるけど、cgywin1.dllには0x6115B900の対象がないとか。

ということで、orasql9.libが対象とする正しいcygwin1.dllを

どっかからとってくるのが正しいと思います。

◎質問者からの返答

おっしゃっていることは分かりますが…。

その正しいDLLはどこにあるんでしょうね:(。

cygwinでPro*Cのコードを動かした方は居ませんかね:(。


3 ● yostat
●10ポイント

試してみて、現象を確認しました。

そこで、リンク時に

g++ -mno-cygwin *.o orasql9.lib

とやってみたら、ちゃんと動いているように見えます。

お試しください。

原因ははっきりとはわかりません。cygwinのバグなのかもしれません。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ