未解决的外部符号错误仅在64位模式下发生,而在32位版本中不发生 [英] Unresolved external symbol error occurring only in 64-bit mode and not in 32-bit build
问题描述
我有一个VC ++代码(使用VS2008构建),该代码利用了一些静态库(* .lib文件在编译时静态链接).
为便于理解,我们将我的EXE代码称为"AAA.EXE"&将lib文件称为"A.lib",b.lib等...
AAA.EXE代码和静态库代码都是使用VS2008构建的.
我看到我的"AAA.EXE"在32位版本中工作正常,并且在以64位模式构建AAA.EXE时显示以下链接器错误.
我当然已经在64位模式下重建了静态库,并在AAA.EXE中提供了lib路径,例如:::对应于AAA.EXE的项目配置属性->链接器->常规/输入". /p>
这个链接器错误确实困扰了我很长时间.任何帮助是极大的赞赏.
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位:: 1)
2)
当然,该代码与32位& 64位. VC2008中的这两项设置更改是否已完成,以使32位AAA.exe代码成为64位版本?
通过查看另一个stackoverflow链接,我看到项目配置属性->链接器->高级->目标计算机默认为"未设置"中还有一个设置. 并且如果我使目标计算机=="MACHINEx64",则会收到另一种错误,该错误与我之前的::: p
严重错误LNK1112:模块机器类型'X86'与目标冲突 机器类型"x64""
我是否应该将链接器选项中的目标计算机"字段设置为未设置"或"MACHINEx64",确实不明确?
如果是是",我需要弄清楚如何解决该问题.
从外观上看,您仅将项目的一半更改为x64
,其余的保留为Win32
.由于您没有显示项目的依赖关系,因此很难猜测这是否是一个问题……无论如何,要使编译成功,您必须将所有依赖项目(库)都切换到x64! >
I have a VC++ code (built using VS2008), which makes use of some static libraries (*.lib files linked statically during compile time).
For ease of understanding let's refer my EXE code as "AAA.EXE" & refer the lib files as "A.lib", b.lib etc...
Both the AAA.EXE code and static libraries code are built using VS2008.
I see that my "AAA.EXE" is working fine in 32-bit version and showing the below linker errors when AAA.EXE is built in 64-bit mode.
I have of course rebuilt the static libraries in 64-bit mode and provided the lib path in my AAA.EXE like this :: "Project Configuration Properties corresponding to AAA.EXE -> Linker -> General/Input".
This linker error is really bothering me form a long time. Any help is greatly appreciated.
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
Also to add ::
I have done 2 changes in the settings to make my AAA.exe code 64-bit from 32-bit:: 1)
2)
Ofcourse the code is compatible for both 32-bit & 64-bit. Are these 2 settings changes in VC2008 complete for making the 32-bit AAA.exe code 64-bit build?
By looking at another stackoverflow link I see there is one more settoing in "Project Configuration properties -> Linker-> Advanced-> Target machine is default to "not set" and if I make target machine == "MACHINEx64", I get a different sort of error which I was getting earlier ::
"fatal error LNK1112: module machine type 'X86' conflicts with target machine type 'x64'"
I'm really not having a clarity on if I should be setting the "Target machine" field in linker option as "Not Set" or "MACHINEx64"?
If it's a "YES", I need to figure out how to fix the problem.
From the looks of it, you're only changing half of your projects to x64
and leave the rest to Win32
. Since you don't show your project's dependencies, its hard to guess if that's a problem or not ... in any case, for compilation to succeed you'll have to switch all of the dependent projects (libs) to x64!
这篇关于未解决的外部符号错误仅在64位模式下发生,而在32位版本中不发生的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!