0

これはスレッド「32 ビット ビルドではなく 64 ビット モードでのみ発生する未解決の外部シンボル エラー」の続きです。

いくつかの静的ライブラリ (コンパイル時に静的にリンクされた *.lib ファイル) を使用する VC++ コード (VS2008 を使用してビルド) があります。

理解しやすくするために、EXE コードを「AAA.EXE」と呼び、lib ファイルを「A.lib」、b.lib、およびLOGGER.lib (以下のエラーの原因となっているライブラリ)と呼びます。

AAA.EXE コードと静的ライブラリ コード (LOGger.lib) の両方が、VS2008 を使用して構築されています。

「AAA.EXE」は 32 ビット バージョンでは正常に動作していますが、AAA.EXE が 64 ビット モードでビルドされると、以下のリンカ エラーが表示されます。

クイック リファレンス用にリンカ エラーを再度コピーします。

Logger.lib(Logger.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall CWTTLogger::CWTTLogger(void)" (__imp_??0CWTTLogger@@QAE@XZ)         

1>Logger.lib(Logger.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: virtual __thiscall CWTTLogger::~CWTTLogger(void)" (__imp_??1CWTTLogger@@UAE@XZ)

1>Logger.lib(Logger.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: long __thiscall CWTTLogger::CreateLogDevice(unsigned short *,long *)" (__imp_?CreateLogDevice@CWTTLogger@@QAEJPAGPAJ@Z)              

1>Logger.lib(Logger.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: long __thiscall CWTTLogger::StartTest(unsigned short *,long)" (__imp_?StartTest@CWTTLogger@@QAEJPAGJ@Z)        

1>Logger.lib(Logger.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: long __thiscall CWTTLogger::EndTest(unsigned short *,unsigned long,unsigned short *,long)" (__imp_?EndTest@CWTTLogger@@QAEJPAGK0J@Z)

1>Logger.lib(Logger.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: long __cdecl CWTTLogger::Trace(unsigned long,long,...)" (__imp_?Trace@CWTTLogger@@QAAJKJZZ)     

1>Logger.lib(Logger.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: long __thiscall CWTTLogger::CloseLogDevice(unsigned short *,long)" (__imp_?CloseLogDevice@CWTTLogger@@QAEJPAGJ@Z)          

1>C:\Users\User1\Documents\XYZ\Code\64bit\aaa.exe: fatal error LNK1120: 7 unresolved externals        

ここで、CWTTLOGger は、Microsoft が提供するヘッダー ファイル「wttlogger.h」のクラスです。
Logger.lib は、Microsoft WTTLog.DLL とそれに対応するヘッダー ファイル "wttlogger.h" を使用しているカスタム ライブラリです。

このリンカ エラーの根本原因を突き止めました。Logger.lib スタティック ライブラリ コードは、ヘッダー ファイル「wttlogger.h」からこの WTTLog.DLL 内の関数を呼び出すことにより、Microsoft WTTLog.DLL を利用します。

32 ビットの AAA.exe (Logger.lib スタティック ライブラリにリンク) で呼び出された場合、これらの呼び出しは正常に機能しています (リンカー エラーはありません)。しかし、64 ビットの AAA.EXE (64 ビットの Logger.lib にリンク) が WTTLog.DLL の関数を呼び出すと、上記のリンカー エラーが発生します。

WTTLog.DLL/WTTLog.lib ライブラリが 64 ビットでないか、このライブラリのヘッダー ファイル「wttlogger.h」がライブラリ定義と一致しないことは明らかです。

「C:\WinDDK\Win8-RTM\Tools\x64\WTTlog.dll」で Windows DDK の 64 ビット用の WTTLog.DLL を見つけました。私が間違っている場合は、私を修正してください。

しかし、この 64 ビットの Wttlog.DLL に対応するヘッダー ファイルと、この DLL "WTTLog.DLL" に対応するスタティック ライブラリはどこにありますか。??

4

0 に答える 0