Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 未解决的外部符号错误仅在64位模式下发生,而不是在32位生成中发生_C++_Visual C++_32bit 64bit_Linker Errors_Unresolved External - Fatal编程技术网

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

C++ 未解决的外部符号错误仅在64位模式下发生,而不是在32位生成中发生,c++,visual-c++,32bit-64bit,linker-errors,unresolved-external,C++,Visual C++,32bit 64bit,Linker Errors,Unresolved External,我有一个VC++代码(使用VS2008构建),它利用了一些静态库(*.lib文件在编译时静态链接) 为了便于理解,让我们将我的EXE代码称为“AAA.EXE”&将lib文件称为“A.lib”,b.lib等等 AAA.EXE代码和静态库代码都是使用VS2008构建的 我看到我的“AAA.EXE”在32位版本下运行良好,并且在64位模式下构建AAA.EXE时显示以下链接器错误。 当然,我已经在64位模式下重建了静态库,并在AAA.EXE中提供了如下库路径:“与AAA.EXE对应的项目配置属性->链接

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

为了便于理解,让我们将我的EXE代码称为“AAA.EXE”&将lib文件称为“A.lib”,b.lib等等

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

我看到我的“AAA.EXE”在32位版本下运行良好,并且在64位模式下构建AAA.EXE时显示以下链接器错误。

当然,我已经在64位模式下重建了静态库,并在AAA.EXE中提供了如下库路径:“与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
另加:

我已对设置进行了2次更改,使AAA.exe代码从32位变为64位: (一)

(二)

当然,该代码兼容32位和64位。VC2008中的这两项设置更改是否已完成,以便生成32位AAA.exe代码64位版本

通过查看另一个stackoverflow链接,我看到“项目配置属性->链接器->高级->目标机器默认为“未设置”中还有一个设置 如果我让目标机器==“MACHINEx64”,我会得到一个不同类型的错误,这是我之前得到的:

致命错误LNK112:模块计算机类型“X86”与目标冲突 机器类型“x64”

我真的不清楚是否应该将链接器选项中的“Target machine”字段设置为“not Set”或“MACHINEx64”


如果是“是”“,我需要找出解决问题的方法

从外观上看,您只将一半的项目更改为
x64
,而将其余项目更改为
Win32
。由于您没有显示项目的依赖关系,因此很难猜测这是否是一个问题。。。无论如何,要使编译成功,您必须将所有依赖项目(LIB)切换到x64

致命错误LNK1112表示您在尝试创建64位可执行文件时确实在以32位模式链接某些内容

图2)仅显示了64位模式下的部分但并非所有项目。这听起来像是麻烦

也许问题出在您的LIB目录中? 通常我的项目(此处为VS2010)在以下方面有所不同:

Project Properties -> VC++ Directories -> Library Directories

它指向
lib32
lib64
目录,具体取决于目标体系结构。

我想我找到了问题所在

AAA.EXE使用Logger.lib静态库,该库反过来调用WTTLog.DLL中的函数。这个微软的DLL“WTTLog.DLL”是一个32位的DLL

这就是为什么它在64位AAA.EXE中不适用于我

因此,我确实找到了我在本文中提出的问题的答案,即如何在64位应用程序中链接64位库。但这仍然给我留下了一个问题

我在哪里可以找到64位版本的WTTLog.lib和wttloger.h。 为此,我创建了一个新线程,因为问题现在不同了


我知道这是一个旧线程,但我发现我必须添加“显式”“导出到DEF文件以使其工作。必须是32位是隐式添加的,而64位不是。希望这对某人有所帮助:)

这是什么
CWTTLogger
类,它是来自您的某个LIB吗?可能有一些事情可能是问题所在,但在您显示的内容中看不到任何原因。最明显的问题是:您确定您是在用64位重建库并根据它链接,而不是偶然的32位版本吗?我已经添加了更多关于如何将32位版本更改为64位版本AAA.EXE的详细信息。是的,CWTTLOgger是我定义的库(.lib)中的类名。我想澄清一下,我的静态库(.lib)存在于另一个解决方案中,我已将它们全部更改为x64。在快照中,我显示了每个项目都是一个独立的EXE,并且与同一解决方案的另一个项目没有关系/依赖关系。我所有的库A.lib、B.lib等。。。都存在于另一个解决方案中我想澄清一下,我的静态库(.lib)存在于另一个解决方案中,我已经将它们全部更改为x64。在快照中,我显示了每个项目都是一个独立的EXE,并且与同一解决方案的另一个项目没有关系/依赖关系。我所有的库A.lib、B.lib等。。。都存在于另一个解决方案中。您是否也使用特定于平台的输出目录?e、 g.“$(解决方案目录)$(配置)\$(平台)\”?否则,这些可能会从不同的构建中混淆。我使用的是特定于平台的输出目录。我不确定如何消除这个长期困扰我的错误。我想澄清一下,我的静态库(.lib)存在于另一个解决方案中,我已将它们全部更改为x64。在快照中,我显示了每个项目都是一个独立的EXE,并且与同一解决方案的另一个项目没有关系/依赖关系。我所有的库A.lib、B.lib等。。。都存在于另一个解决方案中但是你也有32位的库,对吗?它们可能位于相同的名称下,但路径不同(我在错误消息中看到“Logger.lib”名称,而不是“Logger32.lib”或“Logger64.lib”)。我的观点是-您确定64位的lib路径设置正确吗?