Vs 中出现 error LNK2019: 无法解析的外部符号的解决参考

    今天编辑动态库链接生成静态文件,但是调用dll封装的类的几个函数后出现如下错误:

错误:
1>正在链接...
1>   正在创建库 ..\ssnmate\Debug\QQDLL.lib 和对象 ..\ssnmate\Debug\QQDLL.exp
1>QQDLL.obj : error LNK2019: 无法解析的外部符号 "public: static int __cdecl CSpeechManager::AddEventSpeech(enum SPEAK_PRIORITY,unsigned long,class CSpeakItem *,class CSpeakItem *,class CSpeakItem *)" (?AddEventSpeech@CSpeechManager@@SAHW4SPEAK_PRIORITY@@KPAVCSpeakItem@@11@Z),该符号在函数 "long __stdcall HookProc(int,unsigned int,long)" (?HookProc@@YGJHIJ@Z) 中被引用


最后发现没有把库文件添加进去,添加库文件步骤:project-属性--link--输入--依赖库: 添加相应的库文件(可能是SpeechManager.lib)

后面为网上找的解决问题的方法:

碰到“error LNK2019: 无法解析的外部符号”收藏
 有一个解决方案,有两个工程A,B。工程B中定义了一个类,在工程A的demo.cpp中引用该类,但是如果是

#include "XX,h",则会出现“error LNK2019: 无法解析的外部符号”

如果是#include "XX.cpp",则可以顺利编译通过。

想来是因为引用 .h 文件导致找不到.cpp中的定义,而引用.cpp可以通过.cpp找到.h(.cpp有对.h的include)

但是如果同在工程B下面,则#include "XX,h"也是正确的,它会自动关联到同名的(反正是对应的).cpp文件。

在不同工程中应该如何引用呢?

看见一种原因分析,如下:

现场情况:

funcname 在文件file.cpp/h中定义实现

void funcname(void) {;}

filecall.c文件内呼叫funcname()函数。

出现上面情况。

症因:因c/c++混合编程, c文件内函数无法呼叫c++文件内函数。

解决,或者将c文件名改为.cpp,或者将c++文件名改为.c

上面的解决采用将 file.cpp 更名为file.c即可。

来自CSDN博客:http://blog.csdn.net/friday5pm/archive/2007/03/08/1523859.aspx

你可能感兴趣的:(c++)