VC++ LNK2001:仅在 64 位编译时无法解析外部符号
Posted
技术标签:
【中文标题】VC++ LNK2001:仅在 64 位编译时无法解析外部符号【英文标题】:VC++ LNK2001: unresolved external symbol only when compiling on 64bit 【发布时间】:2009-08-19 16:28:14 【问题描述】:我制作了一个在 32 位模式下编译良好的 dll,但是在 64 位模式下编译时(在 32 位盒交叉编译和本机 64 位盒上)我得到了上述错误。 它抱怨的符号如下:
"struct return_info_ * __cdecl patch_file(char *,char *,char *)"
我是 C++ 新手,但我认为我已经正确定义了结构和签名。 结构体“return_info_”定义如下:
typedef struct return_info_
char *message;
int code;
return_info;
在同一个标题中,我有函数的签名:
return_info* patch_file(char* oldfile, char* newfile, char* patchfile);
这一切都在本机 c/c++ 代码中,它被编译为静态链接库。然后我有我们的主库,它链接到这个并且是一个 clr 兼容的二进制文件。任何想法为什么 64 位编译器会抛出这些错误?
【问题讨论】:
【参考方案1】:标头中的声明看起来是正确的,但由于某种原因,在您的 64 位构建中,没有找到实际的实现。
这是在您的库中定义的吗?它在 64 位版本中可能没有正确编译。
如果这是您的应用程序的一部分,请确保将正确的源文件也包含在 64 位构建过程中。
【讨论】:
当我摆弄各种构建和链接器选项时,我没有注意到 64 位构建已转到不同的目录,我必须更改它。清除所有内容,确保所有内容都指向正确的位置,现在可以正确编译。谢谢!以上是关于VC++ LNK2001:仅在 64 位编译时无法解析外部符号的主要内容,如果未能解决你的问题,请参考以下文章
VS2022编译GDAL库报错: LINK : error LNK2001: 无法解析的外部符号 _OSRValidate _OGR_G_GetPointCount _OGRRegisterAll
VS2022编译GDAL库报错: LINK : error LNK2001: 无法解析的外部符号 _OSRValidate _OGR_G_GetPointCount _OGRRegisterAll
错误 1 error LNK2001: 无法解析的外部符号 _mainCRTStartup 错误 2 error LNK1120: 1 个无法解析的外部命
error LNK2001: 无法解析的外部符号 __imp__pthread_mutex_init
VS2008 VC++/MFC 出错LNK2001与1120
VC6 编译错误error LNK2001: unresolved external symbol "public: virtual struct