OSはXP、Visual Studio2005です。
Debugモードだとコンパイルが通り、ビルドできるのですが、
Releaseモードだと以下のエラーになります。
※error LNK2001: 外部シンボル~は未解決です。
※fatal error LNK1120: 外部参照1が未解決です。
過去の質問やF1のヘルプを見てみましたが、解決できませんでした。
試した事はヘルプの『解決するには、/Zl を [コマンド ライン] プロパティ ページか
ら削除します。』
です。これでも同様のエラーでした。
よろしくお願いします。
>Debugモードだとコンパイルが通り、ビルドできるのですが、
>Releaseモードだと以下のエラーになります。
一応 Debug と Release のプロジェクトの設定のところで相違がないか
(特にリンクの入力あたり)確認してみてはどうでしょうか?
予想:libファイルのリンクの設定をDebugの方しかプロジェクトの設定をしていない。
プロジェクトの各設定はDebug時とRelease時で別々に管理されています。
なので、Debugの方に設定しただけだとReleaseの方は初期設定のままになっている
可能性が非常に高いです。
これは、Debug時とRelease時でリンクする対象のライブラリを変える必要がある場合が
ある為で具体的に言うとデバッグ時はデバッグ情報を持ったデバッグ用のライブラリを使
い、リリース時はリリース用のデバッグ情報を持たないライブラリを使用すると言う様な
事をするからです。
Blueさん、
確認した所、異なる所はありましたが、Debugと同じに設定しても同様のエラーが
でました。
『libファイルのリンクの設定』というのもいまいち場所がわかりませんでした。プロパ
ティの設定内ですよね?
PATIOさん、
>これは、Debug時とRelease時でリンクする対象のライブラリを変える必要がある場合が
>ある為で具体的に言うとデバッグ時はデバッグ情報を持ったデバッグ用のライブラリを
>使い、リリース時はリリース用のデバッグ情報を持たないライブラリを使用すると言う
>様な事をするからです。
二つある理由がわかり、用途目的も理解できました。ありがとうございます。確かに自
分の設定はDebugのみ変更されていた箇所がいくつかありました。
これは常にDebugとReleaseのプロパティ一緒にしなくてはいけないという
事なのでしょうか。
さて、問題の方はエラーで示されていた場所に余計なものがついていて消したら両方コ
ンパイル通るようになりました。
>問題の方はエラーで示されていた場所に余計なものがついていて消したら両方コンパイ
>ル通るようになりました。
?
これって、Debug,Releaseともにコンパイルできなかったのでは?
それとも、修正したところは #ifdef や #if defined(#else) で囲われたとこだったん
でしょうか?(そうだったら、条件コンパイルを理解していないということ?)
いえ、片方(Debugのみ)はコンパイル通っていました。
書いてみると
???View.hクラスの
// 属性
public:
C???Doc* GetDocument();
~~~~~~~~~~~~~~~
が C???Doc* GetDocument();const
となっていて、
下の
#ifndef _DEBUG // ???View.cpp のデバッグ バージョン
inline C???Doc* C???View::GetDocument()
~~~~~~~~~~~~~~~
{ return reinterpret_cast<C???Doc*>(m_pDocument); }
#endif
が、constついてなかったので消したら解決できました。
> #ifndef _DEBUG
問題はここだったわけですね。
一応 _DEBUG でWeb検索してみるといろいろ勉強になると思います。
最初の質問の仕方では、ソースの行番号すらついていなかったので
プロジェクトの設定面の間違いかなと思ってしまったわけです。
そうみたいですね。今後は回答者の方にわかりやすく質問できればと思います。
これから検索してみて勉強したいと思います。
今回は設定面は問題なかったみたいですが、今後そこでのエラーが出る可能性はかなり
あると思うので、ちゃんとしていきたいです。
ありがとうございました。