リンカーツールエラー LNK2001 – プログラミング – Home

リンカーツールエラー LNK2001
 
通知
すべてクリア

[解決済] リンカーツールエラー LNK2001


はな
 はな
(@はな)
ゲスト
結合: 22年前
投稿: 123
Topic starter  

OSはXP、Visual Studio2005です。

Debugモードだとコンパイルが通り、ビルドできるのですが、
Releaseモードだと以下のエラーになります。

※error LNK2001: 外部シンボル~は未解決です。
※fatal error LNK1120: 外部参照1が未解決です。

過去の質問やF1のヘルプを見てみましたが、解決できませんでした。

試した事はヘルプの『解決するには、/Zl を [コマンド ライン] プロパティ ページか
ら削除します。』
です。これでも同様のエラーでした。

よろしくお願いします。


引用未解決
トピックタグ
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

>Debugモードだとコンパイルが通り、ビルドできるのですが、
>Releaseモードだと以下のエラーになります。
一応 Debug と Release のプロジェクトの設定のところで相違がないか
(特にリンクの入力あたり)確認してみてはどうでしょうか?

予想:libファイルのリンクの設定をDebugの方しかプロジェクトの設定をしていない。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

プロジェクトの各設定はDebug時とRelease時で別々に管理されています。
なので、Debugの方に設定しただけだとReleaseの方は初期設定のままになっている
可能性が非常に高いです。
これは、Debug時とRelease時でリンクする対象のライブラリを変える必要がある場合が
ある為で具体的に言うとデバッグ時はデバッグ情報を持ったデバッグ用のライブラリを使
い、リリース時はリリース用のデバッグ情報を持たないライブラリを使用すると言う様な
事をするからです。


返信引用
はな
 はな
(@はな)
ゲスト
結合: 22年前
投稿: 123
Topic starter  

Blueさん、
確認した所、異なる所はありましたが、Debugと同じに設定しても同様のエラーが
でました。
『libファイルのリンクの設定』というのもいまいち場所がわかりませんでした。プロパ
ティの設定内ですよね?

PATIOさん、
>これは、Debug時とRelease時でリンクする対象のライブラリを変える必要がある場合が
>ある為で具体的に言うとデバッグ時はデバッグ情報を持ったデバッグ用のライブラリを
>使い、リリース時はリリース用のデバッグ情報を持たないライブラリを使用すると言う
>様な事をするからです。

二つある理由がわかり、用途目的も理解できました。ありがとうございます。確かに自
分の設定はDebugのみ変更されていた箇所がいくつかありました。
これは常にDebugとReleaseのプロパティ一緒にしなくてはいけないという
事なのでしょうか。

さて、問題の方はエラーで示されていた場所に余計なものがついていて消したら両方コ
ンパイル通るようになりました。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

>問題の方はエラーで示されていた場所に余計なものがついていて消したら両方コンパイ
>ル通るようになりました。

これって、Debug,Releaseともにコンパイルできなかったのでは?
それとも、修正したところは #ifdef や #if defined(#else) で囲われたとこだったん
でしょうか?(そうだったら、条件コンパイルを理解していないということ?)


返信引用
はな
 はな
(@はな)
ゲスト
結合: 22年前
投稿: 123
Topic starter  

いえ、片方(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ついてなかったので消したら解決できました。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

> #ifndef _DEBUG
問題はここだったわけですね。
一応 _DEBUG でWeb検索してみるといろいろ勉強になると思います。

最初の質問の仕方では、ソースの行番号すらついていなかったので
プロジェクトの設定面の間違いかなと思ってしまったわけです。


返信引用
はな
 はな
(@はな)
ゲスト
結合: 22年前
投稿: 123
Topic starter  

そうみたいですね。今後は回答者の方にわかりやすく質問できればと思います。

これから検索してみて勉強したいと思います。

今回は設定面は問題なかったみたいですが、今後そこでのエラーが出る可能性はかなり
あると思うので、ちゃんとしていきたいです。

ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました