0

这是线程“ Unresolved external symbol error occurred only in 64-bit mode and not in 32-bit build ”的延续。

我有一个 VC++ 代码(使用 VS2008 构建),它使用了一些静态库(在编译期间静态链接的 *.lib 文件)。

为了便于理解,我们将我的 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 是微软提供的头文件“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