VC++ 6.0 MFC でプログラミングしています。
質問なのですが、リリースビルドではエラーは出ませんが
デバッグビルドでリンク中にエラーが出ます。
ビルド時のメッセージは以下の通りです。
どなたか原因と対策を教えて頂きたく、宜しくお願いします。
( ビルド時のメッセージ )
コンパイル中...
stdafx.cpp
コンパイル中...
dio1dlg.cpp
DIO1vc.cpp
コードを生成中...
リンク中...
atlsd.lib(Allocate.obj) : error LNK2001: 外部シンボル ___security_cookie は未解決
です
atlsd.lib(AtlTraceModuleManager.obj) : error LNK2001: 外部シンボ
ル ___security_cookie は未解決です
nafxcwd.lib(viewedit.obj) : error LNK2001: 外部シンボル ___security_cookie は未解
決です
nafxcwd.lib(viewcore.obj) : error LNK2001: 外部シンボル ___security_cookie は未解
決です
(途中、省略)
WinDebug/DIO1vc.exe : fatal error LNK1120: 外部参照 10 が未解決です。
link.exe の実行エラー
DIO1vc.exe - エラー 151、警告 0
おはようございます。
> 質問なのですが、リリースビルドではエラーは出ませんが
> デバッグビルドでリンク中にエラーが出ます。
> ビルド時のメッセージは以下の通りです。
リンクがデバッグの方にできていないため起こるエラーだと
考えられます。
次の方法を試してください。
1.プロジェクト→設定→設定の対象をWin32 Releaseにして→リンクタブをクリック
2.オブジェクト/ライブラリモジュール(&L)のテキストフィールド内を全てコピー
3.設定の対象をwin32 Debugにしてオブジェクト/ライブラリモジュール(&L)の
テキストフィールド内にペーストして、OKを押下。
これで、コンパイルは可能かと思われます。
BlackWind さん
>2.オブジェクト/ライブラリモジュール(&L)のテキストフィールド内を全てコピー
オブジェクト/ライブラリモジュールの欄は空白になっているのですが ???
ちなみにデバッグビルド出来る、別のプログラムも見てみましたが、
オブジェクト/ライブラリモジュールの欄は空白になっていました。
>2.オブジェクト/ライブラリモジュール(&L)のテキストフィールド内を全てコピー
> オブジェクト/ライブラリモジュールの欄は空白になっているのですが ???
そうですか。
では、次の作業を
1.プロジェクト→設定→設定の対象を「全ての構成」にして→リンクタブをクリック
2.以下のものを貼り付けてあげてください。
MFCS42.LIB MFCS42D.LIB MFCS42U.LIB MFCS42UD.LIB NAFXCW.LIB NAFXCWD.LIB
AFXCW.LIB UAFXCWD.LIB
3.貼り付けたら、OKを押下。
> リリースビルドではエラーは出ませんが
謎ですね・・・。
.libをリンクをしていないのに・・・コンパイルが通るとは・・・
原因はよくわからないけど...
atlsd.lib って VC++6.0 には見当たりませんねぇ。
で、VC++.net にはありますねぇ。
___security_cookie って、VC++.net で新たに追加された
バッファオーバーフローチェック機能に関係しているっぽい
雰囲気ですねぇ。
...妙に怪しげですね~。
以上です。(^^;
横からですが確認
>ちなみにデバッグビルド出来る、別のプログラムも見てみましたが、
>オブジェクト/ライブラリモジュールの欄は空白になっていました
別のプログラムではなく同じプロジェクトでデバックとリリースで違うのですよね?
あとリンクタブでデフォルトライブラリを全て無視にチェックありません?
以上です
<<BlackWind さんへ>>
>1.プロジェクト→設定→設定の対象を「全ての構成」にして→リンクタブをクリック
>2.以下のものを貼り付けてあげてください。
>MFCS42.LIB MFCS42D.LIB MFCS42U.LIB MFCS42UD.LIB NAFXCW.LIB NAFXCWD.LIB
>AFXCW.LIB UAFXCWD.LIB
VC++ 6.0 の LIB フォルダーには NAFXCW.LIB NAFXCWD.LIB 以外はなく、
他の ’LIB が見つかりません’というエラーが出ます。
<< 凸凹 さんへ >>
>atlsd.lib って VC++6.0 には見当たりませんねぇ。
>で、VC++.net にはありますねぇ
このプログラムは、計測器を制御するパソコンに入れるボードを作っているメーカーから
入手したサンプルプログラムです。
現在、このプログラムを改造して使おうとしています。
メーカーに問い合わせした方が良いでしょうか。
<<ナオーバ さんへ>>
>別のプログラムではなく同じプロジェクトでデバックとリリースで違うのですよね?
そうです。同じプロジェクトでデバックとリリースで違うのです。
>あとリンクタブでデフォルトライブラリを全て無視にチェックありません?
チェックはありません。
>1.プロジェクト→設定→設定の対象を「全ての構成」にして→リンクタブをクリック
>2.以下のものを貼り付けてあげてください。
>MFCS42.LIB MFCS42D.LIB MFCS42U.LIB MFCS42UD.LIB NAFXCW.LIB NAFXCWD.LIB
>AFXCW.LIB UAFXCWD.LIB
> VC++ 6.0 の LIB フォルダーには NAFXCW.LIB NAFXCWD.LIB 以外はなく、
> 他の ’LIB が見つかりません’というエラーが出ます。
すいません。
きっと、NAFXCWD.LIB これだけでいいと思います。
<< 凸凹 さんへ >>
>atlsd.lib って VC++6.0 には見当たりませんねぇ。
>で、VC++.net にはありますねぇ
> このプログラムは、計測器を制御するパソコンに入れるボードを作っているメーカーから
> 入手したサンプルプログラムです。
> 現在、このプログラムを改造して使おうとしています。
> メーカーに問い合わせした方が良いでしょうか。
開発環境が違うと、こういう問題は起きるような・・・。
メーカーに問い合わせなくても良いと思いますよ。
[ツール]-[オプション]の[ディレクトリ]タブで、
「表示するディレクトリ(S)」の「インクルードファイル」や「ライブラリファイル」
などの設定に、VC++.net のディレクトリが含まれているようなら、削除。
逆行するような意見で申し訳ないのですが、
提供されているサンプルプログラムがどのような環境で作成されたかは
把握しておくべきだと思います。
話の内容からするとプロジェクトごともらっているような気もしますし、
MFCのバージョンやら何やらが絡んで動かないというようなことに
ならないためにもそこのところは把握しておくべきです。
(今回のものが動く動かないというより、一般論として)
その上で違う環境に移植しようというのであれば、それはそれでしょう。
凸凹 さんへ
>[ツール]-[オプション]の[ディレクトリ]タブで、
>「表示するディレクトリ(S)」の「インクルードファイル」や「ライブラリファイル」
>などの設定に、VC++.net のディレクトリが含まれているようなら、削除。
VC++.net のディレクトリは有りませんでした。
PATIO さんへ
>逆行するような意見で申し訳ないのですが、
>提供されているサンプルプログラムがどのような環境で作成されたかは
>把握しておくべきだと思います。
2日前に問い合わせしましたが、まだ回答がありません。
これ以上、待てないのでサンプルプログラムの中で使える部分を取り出して、
新規に作ることにしました。
たくさんの方からのコメント、有難うございました。