11

そのため、レガシー アプリを 32 ビットから 64 ビットにコンパイルしようとしています。使用しているすべてのライブラリを再コンパイルし、ライブラリの WIN SDK6.0A x64 ビットを調べました。

私は使っている:

  • Visual Studio プロフェッショナル エディション 2008
  • ビジュアル C++
  • dotNet フレームワーク 3.5 SP1
  • Windows Server 2008R2
  • Windows SDK は 6.0A です

すべてがついに登場しましたが、これらの奇妙な未定義シンボルエラーが発生しています:

error LNK2019: unresolved external symbol InterlockedDecrement referenced in function ...
error LNK2019: unresolved external symbol InterlockedIncrement referenced in function ...
error LNK2019: unresolved external symbol GetModuleBaseName referenced in ...
error LNK2019: unresolved external symbol EnumProcessModules referenced in ...
error LNK2019: unresolved external symbol EnumProcesses referenced in ...
error LNK2019: unresolved external symbol GetProcessMemoryInfo referenced 

問題は、これらがすべて SDK からのものであることです。InterlockedDec と InterlockedInc は kernel32.lib から取得されます

C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib\x64 を確認したところ、kernel32.lib と psapi.lib の両方のライブラリが存在します。

それは間違いなく適切な場所でライブラリを検索します。/VERBOSE:LIB をオンにすると、正しいフォルダーを指しています。

だから、なぜそれらを見つけられないのか、本当に混乱しています。

何か案は???

ありがとう

4

5 に答える 5

14

だから私はついにそれを理解しました... psapi.libが見つかりませんでした

プロジェクト->リンカー->追加の依存関係で、psapi.libと言うだけでなく、フルパスを指定したところ、うまくいきました...以前に見つけられなかった理由はよくわかりませんが、まあ...

于 2010-07-08T15:18:30.787 に答える
1

コンパイルとリンクのコマンド ライン、およびコード内の #def を投稿できますか?

これらのメソッドの 1 つだけを呼び出す単純なプロジェクトを最初から作成した場合、これは発生しますか?

于 2010-07-01T01:20:52.653 に答える
1

記録のために:同じ問題、異なる解決策。ディレクトリのエントリがありました

psapi 

のリストに追加されました

Linker/General/Additional Library Directory 

これにより、古い VS2005 プラットフォーム sdk psapi.lib が使用されました (x86 のみで、x64 バージョンはありませんでした)。エントリを削除した後、インストールされた WinSDK x64/psapi.lib から正しいライブラリが使用されるようになりました。そのため、古い SDK と新しい SDK の混合/注文に注意してください。明らかにフル パスも機能しますが、複数のマシンでプロジェクトを使用する場合に問題になる可能性があります。

于 2013-09-26T11:29:13.203 に答える
1

これは非常に長いショットです (そして、これがそうであるとは本当に信じていません) が、ヘッダーが c++ コンパイルの extern "C" で適切に保護されていない可能性がありますか? システムヘッダーを含めていますか、それとも関数を自分で宣言しているだけですか?

于 2010-06-30T19:05:33.343 に答える