未解决的外部符号错误仅在64位模式下发生,而不是在32位构建中发生

cod*_*ver 5 c++ linker-errors unresolved-external 32bit-64bit visual-c++

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

为了便于理解,我们将我的EXE代码称为"AAA.EXE"并将lib文件称为"A.lib",b.lib等...

AAA.EXE代码和静态库代码都是使用VS2008构建的.

我看到我的"AAA.EXE"在32位版本中工作正常,并且当AAA.EXE以64位模式构建时显示以下链接器错误.

我当然在64位模式下重建了静态库,并在我的AAA.EXE中提供了lib路径,如下所示::"对应于AAA.EXE的项目配置属性 - >链接器 - >常规/输入".

很长一段时间,这个链接器错误确实困扰着我.任何帮助是极大的赞赏.

Logger.lib(Loggerr.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::FunctionA(unsigned short *,long *)" (__imp_?FunctionA@CWTTLogger@@QAEJPAGPAJ@Z)     

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

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

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

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


1>C:\Users\User1\Documents\XYZ\Code\64bit\aaa.exe: fatal error LNK1120: 7 unresolved externals
Run Code Online (Sandbox Code Playgroud)

还要添加::

我在设置中做了2次更改,使我的AAA.exe代码从32位:: 1开始64位 64位构建

2) COnfiguration属性页面中每个项目的64位构建

当然,代码兼容32位和64位.VC2008中的这两个设置更改是否完全用于使32位AAA.exe代码64位构建?

通过查看另一个stackoverflow链接,我看到在"项目配置属性 - >链接器 - >高级 - >目标机器默认为"未设置"中还有一个settoing,如果我制作目标机器=="MACHINEx64",我得到一个我之前收到的各种错误::

"致命错误LNK1112:模块机器类型'X86'与目标机器类型'x64'冲突"

我真的不清楚我是否应该将链接器选项中的"目标机器"字段设置为"未设置"或"MACHINEx64"?

如果它是"是",我需要弄清楚如何解决问题.

cod*_*ing 5

从它的外观来看,你只改变了一半的项目,x64剩下的就是Win32.既然你没有展示你的项目的依赖关系,很难猜测这是否是一个问题......无论如何,为了使编译成功,你必须将所有依赖项目(libs)切换到x64!