eMbedded Visual C++4.0 SP4にて、ハンディターミナルの開発をしているのですが、
プロジェクトをRelease にてリビルドしている時は、エラー無しで.exeもできあがり
問題なさそうなのですが、Debugでリビルドすると、.exeはできますが、警告がでます。
*.obj : warning LNK1166 : cannot adjust code at Offset=0x00001000,
rva=0x0003A4A8
*.lib(*.obj) : warning LNK4209 : debugging information corrupt :
recompile module : linking object as if no debug info
ネット上で検索すると、
LNK1166は、LINKは指定通りにコードを埋め込めません。
LNK4209は、ファイルに誤った CV情報 があります。モジュールを再コンパイルおよび
再リンクをしなさい。
・・・とありましたが、知識が足りなく CV情報 の意味がわかりません。
同じソースでReleaseは通るのに、debugで警告が出るのはなぜなのでしょうか?
申し訳ございませんが、どなたかご教授を宜しくお願い致します。
たぶんCVはCode Viewの略ですね。
objやlibに埋め込まれたデバッグ情報が(非互換で)使えないということ。
ソースから同じ環境で作り直してね、という意味のメッセージです。
ソース無しでリンクしてるobjやlibがあるのでは?
ISLe様、早速ご返信頂きありがとうございます。
ご指摘通り、まずLNK1166のエラーになっているソースの中に、
非互換の部分を見つけてみたいと思います。
>ご指摘通り、まずLNK1166のエラーになっているソースの中に、
>非互換の部分を見つけてみたいと思います。
う~ん。ソース見てもわかんないかも。
ISLe さんの発言
「ソース無しでリンクしてるobjやlibがあるのでは?」
を、おちついて読み直してみてください。
仲澤@失業者様、ありがとうございます。
>ソース無しでリンクしてるobjやlibがあるのでは?
おっしゃる通りあります。
LNK1166の警告がでているオブジェクトは、自分のとこで作成した*.cppソースのもの
ですが、LNK4209の警告がでているライブラリは、ハンディのSDKをインストールした
時に作成されたフォルダの中に出来たソースが無いライブラリファイルで、それらを
リビルド時にインクルードしなければならないのですが、ソースが存在しないため
見ることができないでいます。
Releaseでリビルドすると警告は出ず問題なく*.exeも出来て終るものが、
Debug時にだけ出るというのは、どちらの時にも同じものをインクルードしているのに、
Debug時にだけそのライブラリが使われて警告が出るという事なのでしょうか?
度々、申し訳ありません。
俺俺独自用語が使われているのでアレだけど
既にある hoge.lib (ハンディの SDK とやらに付属してきたもの) をリンクしてる
(ライブラリファイルはインクルードするとは言わない)
Release では異常ない
Debug では警告が出る
っつーことなら答えは簡単、その hoge.lib が Release 用にコンパイル済みなだけ。
Debug モードでは、開発環境 (コンパイラ+リンカ+デバッガ)は、
その「他社製 hoge.lib (コンパイル+デバッグ済み)」の中までデバッグしようとする
つまり hoge.lib がデバッグできるようにコンパイルしてあることを前提に動く
でも umi 氏が今使っている hoge.lib は Release 用にコンパイルされている
=デバッグには不向きな形式でコンパイルされている
=リンカーは hoge.lib をデバッグモードでコンパイルしなおせと警告してる
と、ただそれだけのこと。
対策:
1.hoge.lib の「デバッグ版」を探して入手し、リンク指定を変更する
こうすると hoge.lib の中までデバッグできるようになる
逆に言うと hoge.lib の提供者にとっては中が見られてしまうことになるわけで
デバッグ版ライブラリを入手できる可能性はかなり期待薄
2.現状持っている hoge.lib をそのまま使い警告を無視する
その hoge.lib は提供者が十分デバッグしている=バグが無いはずなので、
プログラムが動かないとしたらその原因は自作部分にあるはずと考えていい。
警告が出ても自作部分はデバッグできるのであれば、これが一番簡単。
警告が出て、でも EXE はできてる、んであれば何の問題も無いはずだ。
tetrapod様、ありがとうございます。
>警告が出て、でも EXE はできてる、んであれば何の問題も無いはずだ。
わかりました。色々とても勉強になりました。
このまま、進めていきたいと思います。