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