导致LNK2019的常见问题:
(1)未链接的对象文件或包含符号定义的库
(2)符号声明的拼写不与符号的定义相同
(3)使用了函数,但类型或参数数目不匹配函数定义
(4)声明但未定义的函数或变量
(5) 调用约定是函数声明和函数定义之间的差异
(6)符号定义在c文件中,但未使用extern C在c++文件中声明
(7)符号定义为静态,并随后被外部文件引用
(8)未定义类的静态成员
(9) 生成依赖项仅定义为解决方案中项目依赖项
(10)第三方库问题和Vcpkg
vcpkg 是一种命令行包管理器,可极大简化 Windows 上第三方库的购置与安装。 如果项目要使用第三方库,建议通过 vcpkg 来安装它们。 vcpkg 同时支持开源和专有库。 已测试 vcpkg 公共目录中所有库与 Visual Studio 2015 及 Visual Studio 2017 的兼容性。通过 vcpkg 可以消除或最大程度减少不匹配二进制文件的存在风险及它可能造成的问题。
常见修改方法:
a.改为静态CRT
Configuration Properties->C/C++->Code Generation->Runtime Library->
debug版选/MD
release版选/MT
b.严重性 代码 说明 项目 文件 行 禁止显示状态
错误 LNK2019 无法解析的外部符号 WinMain,该符号在函数 “int __cdecl __scrt_common_main_seh(void)” (?__scrt_common_main_seh@@YAHXZ)中被引用。
WinMain是Win32项目的入口,所以把应用程序改为控制台类型
[7]import相关的无法解析内容,解决办法是在链接器的依赖项中加入相应的动态库
[9]无法解析的外部符号”__declspec(dllimport) public: int __thiscall HiRTDB::CTagTree::GetObjectA(int,struct HiRTDB::SBaseReadProps const &,struct HiRTDB::SBaseReadValues &)” (__imp_?GetObjectA@CTagTree@HiRTDB@@QAEHHABUSBaseReadProps@2@AAUSBaseReadValues@2@@Z),该符号在函数”public: int __thiscall HiRTDB::CStringImpl::Get(int,struct HiRTDB::SStringReadProps const &,struct HiRTDB::SStringReadValues &)” (?Get@CStringImpl@HiRTDB@@QAEHHABUSStringReadProps@2@AAUSStringReadValues@2@@Z) 中被引用
原因可能是工程配置文件中有多余选项,请参考其他模块的配置选项,不要有多余配置。
[10]在 项目属性\链接器\输入\附加依赖项 中 没有添加*.lib
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/232144.html原文链接:https://javaforall.net
