問題タブ [lnk2001]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
com - 対 2005 エラー LNK2001: 未解決の外部シンボル (2)
「public: virtual long __stdcall PCI1761Event::GetTypeInfoCount(unsigned int *)」 (?GetTypeInfoCount@PCI1761Event@@UAGJPAI@Z)
コード
クラス PCI1761Event :
public CComObjectRoot,
public _IAdvDIOEvents
{
パブリック:
BEGIN_COM_MAP(PCI1761Event)
COM_INTERFACE_ENTRY(_IAdvDIOEvents)
END_COM_MAP()
パブリック: ~PCI1761Event(void); };
どうして????
c++ - QListを初期化静的クラスメンバーがLNK2001エラーを与えるため
これは、コード自体によって最もよく説明されます。QList<MyStruct>を静的メンバーとして使用したいのですが、リンカーエラー2001( LNK2001)が発生します。コードはファイル内で同じ順序になっていますMyClass.h
ヒントはありますか?エランの答え(下のコメントを参照)は正しいヒントです。解決済み
c++ - 未解決の外観の悪夢
こんにちは業界のベテラン、
私は大学の3年生で、最初の夏のプログラミングインターンシップに着手しています。私が働いている会社は、90年代初頭からゆっくりと拡張し、変更している別の会社から巨大なアプリケーションを購入しました。このソリューションには、300を超えるファイルにまたがる200,000行を超えるコードが含まれています。ソリューション全体は、ANSI-C++標準に準拠しているとされています。コードはほとんど完全に文書化されておらず、そのほとんどは私には象形文字のように見えます。最終的に、私の仕事はこのコードを組み込みLinuxに移植することです。現時点では、私の仕事は、WindowsXPでVisualStudio2008を使用してコンパイルすることです。
今日、私は次のようなリンカーエラーに遭遇しています:
libcmtd.lib(sprintf.obj) : error LNK2005: _sprintf already defined in msvcrtd.lib(MSVCR90D.dll)
私の理解では、これは、ソリューション内のさまざまなプロジェクトがさまざまなランタイムライブラリを使用してコンパイルされている場合によく発生します。私のソリューションには6つのプロジェクトがあります。4つはマルチスレッドデバッグDLLランタイムライブラリ(/ MDd)を使用してコンパイルするように設定され、1つはマルチスレッドデバッグライブラリ(/ MTd)を使用してコンパイルするように設定され、1つはマルチスレッドdllランタイムライブラリ(/ MD)。このエラーメッセージを受け取った後、最初に試したのは、すべてが同じランタイムライブラリでコンパイルされるように/MTdおよび/MDスイッチを/MDdに変更することでした。残念ながら、これによりafx.hで次のエラーが発生しました。
fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]
少し掘り下げてみると、私はそれが私が何をする必要があるかをすでに教えてくれていることに気づきました。先に進み、[プロジェクトのプロパティ]->[構成のプロパティ]->[一般]の[MFCの使用]オプションを[共有DLLでMFCを使用する]に変更しました。この時点で、次のような未解決の外部エラーを数十個受け取り始めました。
dataPropertySheet.obj : error LNK2019: unresolved external symbol "public: __thiscall CResizableSheet::CResizableSheet(unsigned short const *,class CWnd *,unsigned int)" (??0CResizableSheet@@QAE@PBGPAVCWnd@@I@Z) referenced in function "public: __thiscall CdataPropertySheet::CdataPropertySheet(unsigned short const *,class CWnd *,unsigned int)" (??0CdataPropertySheet@@QAE@PBGPAVCWnd@@I@Z)
ResizableLib.lib(ResizablePage.obj) : error LNK2001: unresolved external symbol "public: virtual int __thiscall CWnd::Create(char const *,char const *,unsigned long,struct tagRECT const &,class CWnd *,unsigned int,struct CCreateContext *)" (?Create@CWnd@@UAEHPBD0KABUtagRECT@@PAV1@IPAUCCreateContext@@@Z)
LNK2001とLNK2019のMSDNページを読んだ後、何が起こっているのかわからないことに気づきました。これらは、彼らが学校でどのように対処するかを私たちに教えてくれたような問題ではありません。私は自分のデータ構造を知っています、そしてそれはそれについてです。私が今いる場所にたどり着いた方法は私を超えています!
私の限られた知識から、これらのモジュールのさまざまなデバッグバージョンとリリースバージョンはすべて、プリプロセッサディレクティブと#includeのWebに絡み合っているようです。環境変数、ファイル名、マクロなどのソリューション全体で、ほぼすべてのヘッダーファイルとソースファイルで、ネストされた#ifdefチェックと#defineステートメントが多数実行されます。コンパイラの設定に少しでも変更を加えることで、プログラムの大部分を、関数定義が大きく異なるさまざまなライブラリにリダイレクトしているように見えます。これは、何が起こっているのかについての私の漠然とした概念的な理解です。
これらのコンパイラエラーのトラブルシューティングを行う前に、このコードがどのように機能するかをよりよく理解する必要があるように感じます。そのために、私は多くのファイルを1行ずつ調べて、それらがどこにつながるか、どのオブジェクトと変数がスコープ内にあるかなどを確認しようとしています。残念ながら、外部関数へのすべての呼び出しはあいまいであり、特定の関数のどのバージョンが呼び出されるかを知るためにプリプロセッサの混乱を確認する方法がないため、これはあまりわかりません。
私は、プログラムを計画し、それを理解しようとする魔法の解決策を探していました。Doxygenと呼ばれるものを試しましたが、適切に使用する方法がわからないか、プリプロセッサのものと同じように混乱しています。
私の質問はこれです:
私の残りのオプションは何ですか?
この時点で、それは次の間にトスアップです:
a。)メジャーを切り替える
b。)橋から飛び降りる
これらの選択はどちらも、このコードベースをよりよく理解してコンパイルするのに役立ちません。誰かもっと良いアイデアはありますか?同様の経験?賢者の知恵を共有しますか?
トンありがとう、-
アレックス
c++ - このリンカーエラーを追跡するにはどうすればよいですか?
私は最初のインターンシップに取り組んでいますが、この恐ろしいものをVisual Studio 2008でコンパイルしようとしています。IDE設定とWindowsSDKのインストールを1週間試しましたが、何も作成しないと思います。その方向にさらに前進します。誰もがここで休暇を取っているので、私には頼れる上級エンジニアがいません。Stack Overflowを手伝ってください、あなたが私の唯一の希望です!
今日、私は特定のエラーを追跡しようとしているので、すべてが壊れている理由がわかります。おそらくそれなら、私はそれを修正する方法についてより良い洞察を得るでしょう。ここ数時間、私はこれに取り組んできました:
6>ResizableLib.lib(ResizablePage.obj) : error LNK2001: unresolved external symbol "public: virtual int __thiscall CWnd::Create(char const *,char const *,unsigned long,struct tagRECT const &,class CWnd *,unsigned int,struct CCreateContext *)" (?Create@CWnd@@UAEHPBD0KABUtagRECT@@PAV1@IPAUCCreateContext@@@Z)
私の理解では、CWnd :: Create関数は、私が作業しているResizableLibプロジェクト内からは見つかりません。呼び出されていたファイルを見つけ、インクルードをトレースして、呼び出されたポイントでCWnd::Createの定義が必要かどうかを確認しました。プロジェクト全体(alt + E + F + I)でCreate(を検索することから始めました。これにより、Create関数が呼び出されているすべてのインスタンスが取得されると考えたためです。Createで終わる関数への他の呼び出しがいくつか見つかりましたが、1つだけです。 Create関数自体を呼び出しているように見えます。
ResizableGrip.cpp(127): BOOL bRet = m_wndGrip.Create(WS_CHILD | WS_CLIPSIBLINGS
だから...私はResizableGrip.cppを開いて、インクルードを調べました。ファイルの最初の行は次のとおりです。
#include "stdafx.h"
そのファイルをチェックして、CWnd :: Createの関数宣言があるかどうか、またはおそらくそのファイルのある種の継承バージョンがあるかどうかを確認することにしました。このファイルを含めるためのプリプロセッサ条件はありませんでした(このプログラムには他の多くのポイントがあるため)。したがって、stdafx.hが含まれると言っても差し支えないと思いました。どれを把握するためにstdafx.hファイルが含まれます(とにかく通常使用されるstdafx.hファイルは何ですか?私はそれらをいたるところに見ます!)、コンパイラが最初に見えると思うので、私は最初にResizableGrip.cppファイルと同じディレクトリを調べましたプロジェクト内の追加のインクルードパスを確認する前に、インクルードファイルと同じディレクトリにあり、最後にメインのVisual StudioVC++設定にリストされているインクルードパスが続きます。これは正しいです?とにかく、同じディレクトリにStdAfx.hファイルがあったので、これが含まれると結論付けました。ファイルの最初の数行は次のようになりました。
ここで行われているすべてのプリプロセッサのことを完全には理解していないことは認めますが、#includeを取り巻く条件がないため、それも含まれていると思います。プロジェクトディレクトリにafxwin.hファイルがなかったので、プロジェクトの追加インクルードを調べました。指定された唯一の場所は....\COMMONだったので、2つのディレクトリを取り出し、COMMONフォルダを見つけて、afxwin.hを探しました。そこには何もなかったので、VC++ディレクトリインクルードのIDE設定を調べました。最初のリストは$(WindowsSdkDir)\ includeだったので、WindowsSdkDir環境変数を調べましたが、もちろん存在しませんでした。レジストリもチェックインしました。サイコロはありません。最終的に、楕円の1つをクリックすることで、これらの記号名を解決できることがわかりました(..。)プロジェクト構成ウィンドウのテキストフィールドの右端に表示されます。これらのウィンドウをクリックして[マクロ]ペインを展開すると表示されます。これを行うことで、$(WindowsSdkDir)がC:\ Program Files \ Microsoft SDKs \ Windows \ v6.0A \を指していることを発見したので、そこに移動してIncludeフォルダーを開きましたが、afxwin.hファイルが見つかりませんでした。$(FrameworkSDKDir)includeは$(WindowsSdkDir)\ includeと同じ場所を指しているので、Visual Studio VC ++ディレクトリインクルードリストの次の行に進みました:$(VCInstallDir)atlmfc \ includeはC:\ ProgramFiles\に解決されましたMicrosoft Visual Studio 9.0 \ VC \ atlmfc \ include \ここで、ついにafxwin.hを見つけました。このファイルには、最終的に、次のように定義されたCreateという関数を持つCwndというクラスがありました。
virtual BOOL Create(LPCTSTR lpszClassName,
LPCTSTR lpszWindowName, DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd, UINT nID,
CCreateContext* pContext = NULL);
これらのパラメーターのいずれかが何であるかはわかりませんが、これはリンカーが最初に泣き言を言っていた関数の非常に再定義されたバージョンであるという仮定に基づいて操作しています。
CWnd::Create(char const *,char const *,unsigned long,struct tagRECT const &,class CWnd *,unsigned int,struct CCreateContext *)
そうでなければ、リンカーが引き継ぐ前に、コンパイラーはこれを関数の別のバージョンとしてキャッチしませんか?実際、私はそれについて考えたので(したがって、私の投稿の理由全体)、コンパイラエラーのトラブルシューティングと同じ方法でコードをウォークスルーするだけだったと思います。私もそうしましたか?これは怪物で、私はここで推測しているだけです。
繰り返しになりますが、タイトルにあるように、リンカーエラーをどのように追跡する必要がありますか? 私がここで行ったことと同様のプロセスはありますか?MSDNの記事では、コードが正常に機能し、コンパイラがなんとかして.objファイルまたは.libファイルを失ったときにこのエラーが発生したように聞こえます。どうすれば正しい場所を再び指すようにできますか?
うーん、-アレックス
visual-studio-2010 - Qt Q_OBJECT が Visual Studio 2010 でリンカー エラーを作成する
Qt を Visual Studio 2010 で動作させようとしています。デバッガーで実行できる作業プログラムを作成しました。しかし、Q_OBJECT マクロをクラスに追加しようとすると、リンカー エラーが大量に生成されます。
他の人が提起した同様の問題をいくつか見てきましたが、それはコンパイラとモック、および私の初心者の脳がまだ完全に理解できない他の非常に複雑な技術的なものと関係があるようです. また、その多くは、コマンド ラインを使用してコンパイラを構成している人向けのようですが、私は VS を使用しており、そのままにしておきたいと思っています (基本的には、緑色のボタンを押したいだけです)。矢印をクリックして私のプログラムを見てください-それだけです)。ですから...誰かができるだけ簡単な方法で、リンクやコンパイル、またはこれを達成するために必要なことを実行するように Visual Studio を構成する方法を説明してくれたら、私は永遠に感謝します。
qt - QGIS APIを使用していますが、未解決の外部シンボル "public:static struct QMetaObject const in Windows
QTとQGISAPI(1.8.0)を使用するアプリケーションを構築しようとしています。Linuxでは(QT 4.7.0を使用して)問題は発生しませんが、Windowsでは(QT 4.8.1を使用して)次のようになります。
私の.proファイルは次のとおりです。
QgsVectorLayerとQgsRasterLayerを使用するmaptoolselectクラスとmapwidgetクラスの両方で、クラス定義にQ_OBJECTが含まれています。
どんな助けでも大歓迎です。
どうもありがとう、カルロス
c++ - マップ STL コレクションを含むライブラリはどれですか?
プロジェクトをコンパイルしようとしていますが、マップ オブジェクトを含めると、LNK2001 エラーが発生します。正しいヘッダー ファイルをインクルードしましたが、どのライブラリをインクルードする必要があるかわかりません。
私は Visual Studio 2008 を使用しています。「すべての既定のライブラリを無視する」を「いいえ」に設定すると機能しますが、プロパティをそのように設定することは、最終的な結果に対して許可されたオプションではありません。ある種のすべて STL ライブラリがあると思っていましたが、コードにベクトルとデキューがあり、正常に動作します。エラーが表示されるのは、マップ オブジェクトを追加したときだけです。
msvcrt - msvcrt.libをリンクすると、__ imp__InterlockedCompareExchange@12が見つかりません
過去数日間、次のリンクエラーを解決しようとしていますが、まだ手がかりがありません。VSとwindowsdkのインストールは、他にも100のプロジェクトが正常にビルドされているので、問題ないと思います。正確に私がしたことは、私はVCコンソールプロジェクトを作成し、それにレガシーコードをインポートして、多くの静的ライブラリとリンクしました。コードには_tmainルーチンが含まれており、コンソールで実行されます。実行可能ファイルが以前にビルドされているためです。どこを見ればいいのか教えてください
c++ - エラー LNK2001: 未解決の外部シンボル "__declspec(dllimport) public: class QString & __thiscall QString::operator=(class QString &&)"
上記のエラーに関する情報を見つけたいと切望しています。
Visual Studio 2010 で作業しています。デバッグまたはリリースでプロジェクト (32 ビット) をコンパイルすると、次のメッセージが表示されます。
1>heterogeneous.obj : エラー LNK2001: 未解決の外部シンボル "__declspec(dllimport) public: class QString & _ thiscall QString::operator=(class QString &&)" ( _imp_??4QString@@QAEAAV0@$$QAV0@@Z )
1>debug\nori.exe : 致命的なエラー LNK1120: 1 つの未解決の外部
Linker->Input で QtCore4.lib をリンクし、Linker->General のライブラリ ディレクトリに Qt\4.8.2\lib を追加し、Qt\4.8.2\include と Qt\4.8.2\include\QtCore を含めました。 C/C++->一般。彼らはQStringを定義することになっているようです。他に何ができるかわかりません。
ご助力ありがとうございます。