5

pvcs コンパイラ (Microsoft Visual C++、2008 コンパイラを使用) でメイクファイル システムを使用していますが、次の形式のリンク エラーがいくつか発生します。

error LNK2019: unresolved external symbol __imp__RegisterFilter@8 referenced in function _main

これは、extern "C"宣言を使用しているにもかかわらず、次のように発生しています。

extern "C" int CLRDUMP_API RegisterFilter( LPCWSTR pDumpFileName, unsigned long DumpType );

また、makeexe.mak では、ライブラリは次のようにリンクされています。

$(COMPILEBASE)\lib\clrdump.lib \

正直なところ、私はメイクファイルの専門家ではなく、システムを Microsoft Visual C++ 6.0 から 2008 に切り替えています。以前はシステムが機能していたため、この切り替えはリンク エラーに関係している可能性があります。

どんな助けでも本当に感謝します。

前もって感謝します、

ジョセフ

-- 編集 1 --

PVCのmakefileシステムで詳細を有効にする方法を知っている人はいますか?

上記の関数はすでにコンパイラで装飾されたバージョンであることに注意してください。

__imp__RegisterFilter@8

一方、C++ 関数はただ

RegisterFilter

助けてくれてありがとう、しかし誰かがより完全な解決策を投稿できるなら、それも非常にありがたいです.

ジョセフ

-- 編集 2 --

親切な人がこれを投稿しましたが、サインインすると消えました:

imp プレフィックスは、この関数が DLL からインポートされたことを示します。CLRDUMP_API-の定義を確認してください__declspec(dllimport)。詳細については、この記事を参照してください。

有効なリンクがありましたが、私はそれを失いましたが、いつでもトピックを検索できると思います。

ありがとう、あなたが誰であれ!

-- 編集 3 --

ChrisN に感謝します (私はまだ投票を許可されていません)。更新ボタンを使用したにもかかわらず、あなたの回答は消えましたが、カットアンドペーストを投稿した後に再び表示されました.

これは私の定義です:

define CLRDUMP_API __declspec(dllimport) __stdcall

__stdcall は問題ないと思いますか?

-- 編集 4 --

少なくとも私の特定のシステムでは、回答者、特に ChrisN の努力に感謝していますが、リンク エラーは残っています。誰かがさらに洞察を持っているなら、私はそれを感謝します。再度、感謝します。

4

6 に答える 6

14

プレフィックスは、リンカがこの__imp_関数がDLLからインポートされることを期待していることを示します。

このページのclrdumpライブラリはありますか?extern "C"その場合、ライブラリに付属のヘッダーファイルでは使用されないことに注意してください。次のコマンドを使用してこれを確認しました。

dumpbin /exports clrdump.lib

これは次の出力を生成しますRegisterFilter-これはマングルされたC++関数名です:

?RegisterFilter@@YGHPBGK@Z (int __stdcall RegisterFilter(unsigned short const *,unsigned long))

VisualStudio2008を使用してclrdump.libを使用してサンプルプログラムを作成してみました。コードは次のとおりです。

#include <windows.h>
#include "ClrDump.h"

int _tmain(int argc, _TCHAR* argv[])
{
    RegisterFilter(L"", 0);
    return 0;
}

これをビルドすると、次のリンカーエラーが発生しました。

LNK2019: unresolved external symbol "__declspec(dllimport) int __stdcall RegisterFilter(wchar_t const *,unsigned long)" (__imp_?RegisterFilter@@YGHPB_WK@Z)

コードは、Visual C++6.0で問題なくビルドされます。

dumpbin出力にはasへの最初のパラメーターが表示さRegisterFilterれますunsigned short const *が、リンカーエラーにはが表示されることに注意してくださいwchar_t const *。Visual C ++ 6.0では、wchar_t通常はのtypedefですがunsigned short、それ以降のバージョンでは、これは別個の組み込み型です。

Visual Studio 2008の問題を回避するために、[wchar_tを組み込みの種類として扱う]オプションを[いいえ](/Zc:wchar_t-コンパイラのコマンドラインで指定)に設定すると、コードは正常にビルドされます。

以前の回答と混同してすみません。これがもっとお役に立てば幸いです。

于 2008-12-02T21:16:07.077 に答える
5

私は最近同じ問題を抱えていました。衝突を避けるためにライブラリを除外していましたが、LINKエラーを除いてすべてのバグがなくなりました(あなたが説明したように)。ライブラリを別のライブラリに交換すると (MSVCRT.lib を除外 (無視) していましたが、今は LIBCMT.lib を除外 (無視) しています)、問題はなくなりました。ライブラリがどこかに混在していないことを確認してください。私の場合、リンカーは「imp _aligned_malloc が見つかりません」で失敗していました。もちろん、私のコードにはその名前のメソッドはありませんでした。コンパイラはimpを先頭に追加していました。上記のように除外(無視)を交換すると問題が解決したことを除いて、正確な理由はわかりません。

新しいプロジェクトから始めて、ソース ファイルとヘッダー ファイルを再度追加し、除外する (無視する) ライブラリを追跡します。いろいろな組み合わせを試してください。それが役立つことを願っています。

于 2011-09-30T19:50:25.863 に答える
3

VS2005 で単純な Win32 C++ アプリケーションを作成していたところ、次のエラーが発生しました。

LNK2019: unresolved external symbol __imp__somefunction

このアプリケーションはプロパティ シートを使用していたため、このヘッダー (prsht.h) が必要でした。

私の問題の解決策は次のとおりです。プログラムのProperties→Configuration Properties→Linker→Generalで、 Additional Library Directoriesをに設定しました"C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Lib"

また、プログラムの[プロパティ] → [構成プロパティ] → [リンカー] → [追加オプション] のコマンド ラインに、 を追加しましComCtl32.Lib ComDlg32.Libた。

私のプログラムは問題なくコンパイルされています。私の 2 セント: プログラムに必要なすべてのライブラリを特定する必要があります。ヒント: 含めたすべてのヘッダーを確認してください。リンカーがそれらを認識できることを確認する必要があります。

于 2010-03-31T10:54:34.130 に答える
3

リンカーの詳細出力をオンにしてみてください (通常はコマンド ライン スイッチ)。これにより、リンカーがシンボルを解決しようとしている方法が正確に示されるため、次のことを確認できます。

  • シンボルの署名はあなたが期待するものです
  • リンカーはライブラリの適切な場所を探しています

これが役立つことを願っています!

于 2008-12-02T18:11:58.337 に答える
3

あなたの場合かどうかはわかりませんが、impプレフィックスは、Win32 プロジェクトで x64 ライブラリをコンパイルしていることを意味している可能性があります。

于 2011-05-05T08:31:08.987 に答える
1

.DEF ファイルの使用

__declspec(dllimport) を .DEF ファイルと共に使用する場合は、.DEF ファイルを変更して DATA または CONSTANT を使用し、不適切なコーディングが問題を引き起こす可能性を減らす必要があります。

// project.def
LIBRARY project
EXPORTS
   ulDataInDll   CONSTANT

次の表は、その理由を示しています。

Keyword      Emits in the import library   Exports
CONSTANT     _imp_ulDataInDll              _ulDataInDll
             _ulDataInDll                  

DATA         _imp_ulDataInDll              _ulDataInDll

http://msdn.microsoft.com/en-us/library/aa271769(v=vs.60).aspx

于 2011-08-05T21:26:39.277 に答える