問題タブ [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.
visual-studio-2008 - VS2003 でコンパイルされた .lib が VS2008 でコンパイルされたコードとリンクできないのはなぜですか?
Visual Studio Express 2008 を使用してコンパイルされた一連のコードを、Visual Studio 2003 でコンパイルされた .lib にリンクしようとしたときに、興味深い経験がありました。すべて C++ です。正確には、VS2003 で .lib にコンパイルされたSystemC 2.2.0 カーネルと、VS2008 でコンパイルされた SystemC モデルでした。
リンク時に、リンク中に SystemC.lib ファイル (つまり、VS2003 でコンパイルされたもの) からいくつかのシンボルが見つからないというエラーが発生し続けました。得られるエラーは次のとおりです(いくつかのバリエーションがあります):
さまざまなリードから掘り下げた結果、.lib が期待する機能は次のとおりであることが判明しました。
VS2008 がリンクしようとしていたライブラリ ファイル (libcpmt.lib) では、別の呼び出し規約が使用されていました。
この非互換性が発生した理由を突き止めようとしましたが、最終的にあきらめて、まったく同じ Visual Studio プロジェクトを VS2008 で再コンパイルし、VS2003 の SystemC.lib の代わりにその SystemC.lib を使用しました。これで、問題なく動作しました。
したがって、ここでの基本的な質問は、VS2003 から VS2008 への変更により、一部の関数の呼び出し規約が変更される原因となるのは何ですか? また、VS2003 コンパイルと同じ呼び出し規則を持つ関数を使用するために、VS2008 のリンカーに与える魔法のフラグはありますか?
更新、これまでの回答の要約: Microsoft が C++ (C ではなく C++ のみ) ABI を Visual Studio のメジャー バージョンから次のメジャー バージョンに変更する可能性が非常に高いです。ライブラリには、非互換性の原因となるその他の変更が含まれている場合もあります。最良のアドバイスは、VS の各バージョンの .lib を再コンパイルすることです。基本的には、ソースでユーザーに出荷し、ユーザーがたまたまインストールした VS のバージョンを使用してローカルでコンパイルするだけです。
基本的な問題は、次のアドバイスを使用して発見されました。
これらの質問はこの問題に答えていないことに注意してください。
linker - C++ のリンク - BDB - LNK2001
BDB は、同じ VS の下の同じ PC でコンパイルされます。
#include <db_cxx.h>
int main(){
Db b(NULL, 0);
return 0;
}
1>main.obj: エラー LNK2001: 未解決の外部シンボル ""public: virtual __thiscall Db::~Db(void)" (??1Db@@UAE@XZ)"
1>main.obj : エラー LNK2001: 未解決の外部シンボル ""public: __thiscall Db::Db(class DbEnv *,unsigned int)" (??0Db@@QAE@PAVDbEnv@@I@Z)"
何が間違っている可能性がありますか?
c++ - LNK2001 error in code
I am getting LNK2001 error. The code has been included below. Can someone please help me out?
//UpdateAction.h
// InstrumentCache.h
//fisClient.h
PerformanceTest.cpp
dll - LNK2001: 何を設定するのを忘れましたか?
ネイティブ コードのデバッグに関する以前の質問に続いて、サービスを直接デバッグしてもうまくいかなかったため、コンソール アプリから簡単なテストを作成することにしました。
そこで、vc6 コンソール アプリを作成し、dll プロジェクトをワークスペースに追加して実行しました。
期待どおりに実行する代わりに、次のリンカ エラーを吐き出しました。
これは、リンカ オプションで何かを忘れている単純なケースのようです。しかし、すべて正常なようで、lib ファイル、dll、およびソースが利用可能です。libファイルをナンセンスにロードするように変更すると、それが起動するfatal error LNK1104: cannot open file "asdf.lib"
ので、それは問題ではありません。
以前に dll にリンクしたことがありますが、それらは機能しました。
更新:このスレッドに従って、追加情報を見つけられるかどうかを確認しました。これは、VS2005 の dumpbin が提供するものです。
次に unname を介して実行すると、次のようになります。
これは間違っています。IDE からマングルされた名前を入力すると、次のより良い結果が得られます。
この情報を入手したのですが、どうすればよいですか? このレイモンド・チェンの記事から、手動で修正できるようですが、オプションを微調整できますが、結果からどのオプションが必要かを判断できません (「すべてのパラメーターを無視する」チェックボックスはありますか?!)。
したがって、存在しない関数を探しているか、関数のパラメーターが省略されているようです (または、dumpbin は VC6 ライブラリが好きではありません)。
visual-c++ - 構造体での LNK 2001 エラー
多くのプロジェクトで使用されるいくつかの計算を含む h ファイルと cpp ファイルがあります。
今、私はそれらを別のdllに入れようとしたので、ファイルはすべてのプロジェクトに含まれるべきではありません。
リンクすると、構造体の LNK2001 (未解決のシンボル) エラーが発生しますが、lib と dll は適切な場所にあります。
私は
このマクロは、いくつかのメソッドでうまく機能します。
構造体はそのように定義されています
そして、dll からこの構造体を使用するファイルでは、正しく定義されています (?)
エラーメッセージは次のとおりです。
ヒントはありますか?ありがとうございました
c++ - LNK2019 / 2001: 未解決の外部シンボル
特定のものを含めるのを忘れている人などの問題である同様の質問をオンラインで見ました。ただし、Subversion からコードをチェックアウトした後、このエラーが発生します。他の人は、この問題を起こさずに同じことをしました。私の質問: Visual Studio の設定 (ただし、.sln ファイルに影響を与えるものではない) または Visual Studio の外部で、私のマシンでこのリンカー エラーを引き起こす可能性のあるものはありますか?
ここから Lnk2019 は次のように述べています。
Lnk2001、ここから
編集: LNK2019 エラーは、最初の LNK2001 エラー (特定の dll の作成に関する問題) に起因します。チームの他の誰かからその dll を取得した場合 (VS が削除しないように作成日を明日に調整した場合)、編集およびデバッグできます。もちろん、回避策に頼りたくありません...
dll - DLL によってエクスポートされた関数に変数を渡す方法、エラー LNK2001 が発生する
メイン プログラムから DLL によってエクスポートされた関数に HWND 変数を渡す必要があります。変数は mainHwnd と呼ばれ、DLL は次のように定義されます。
mydll.h
mydll.cpp
メインプログラム
私が得るコンパイル
dumpbin /exports mydll.dll を使用しているときに、グローバル変数名が次のようにマングルされていることがわかります。
私はグーグルで多くのページを調べましたが、結果はありませんでした。多分概念的なエラーがある..ありがとう
c++ - C++/CLI DLL プロジェクトは、VS2008 から VS2010 への変換後にリンクを停止します
アンマネージド C++ LIB を使用する完全に機能するマネージド C++ DLL プロジェクトを VS2008 から VS2010 に変換しました。事前に、VS2010 で LIB を個別に再構築しました (これらは、私が権限を持たない別のプロジェクトの一部です)。しかし、変換後、マネージ DLL プロジェクトがリンクを停止し、LNK2001 エラー メッセージが数回表示されました (以下のサンプルを参照)。「string」および「iosfwd」ヘッダー内で定義された「std」エンティティに関するすべてのエラー。不足しているコンパイラ/リンカー設定はどれですか?
よろしくお願いします。