正在链接... 1> 正在创建库 " />
您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> C/C++ >> error LNK2019: 无法解析的外部符号

error LNK2019: 无法解析的外部符号

来源:网络整理     时间:2016/9/5 2:21:18     关键词:

关于网友提出的“ error LNK2019: 无法解析的外部符号”问题疑问,本网通过在网上对“ error LNK2019: 无法解析的外部符号”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: error LNK2019: 无法解析的外部符号
描述:

在我的工程中包含了其他的工程的文件。格式如下:
#include "..\SpeechManager.h"
……
{
……
CSpeakItem* item = new CSpeakItem(mesHis);
CSpeechManager::AddEventSpeech(SPP_NORMAL, 0, item);
}
错误:
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) 中被引用
1>QQDLL.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall CSpeakItem::CSpeakItem(char const *,int,struct TTS_PARAM *)" (??0CSpeakItem@@QAE@PBDHPAUTTS_PARAM@@@Z),该符号在函数 "long __stdcall HookProc(int,unsigned int,long)" (?HookProc@@YGJHIJ@Z) 中被引用
1>..\ssnmate\Debug\QQDLL.dll : fatal error LNK1120: 2 个无法解析的外部命令
如果头文件换成#include "..\SpeechManager.cpp"
错误如下:
1>   正在创建库 ..\ssnmate\Debug\QQDLL.lib 和对象 ..\ssnmate\Debug\QQDLL.exp
1>QQDLL.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall ISpeechLog::ISpeechLog(void)" (??0ISpeechLog@@QAE@XZ),该符号在函数 "public: class ISpeech * __thiscall CSpeechManager::GetDefaultSpeech(void)" (?GetDefaultSpeech@CSpeechManager@@QAEPAVISpeech@@XZ) 中被引用
1>QQDLL.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall ISpeechIntersound::ISpeechIntersound(void)" (??0ISpeechIntersound@@QAE@XZ),该符号在函数 "public: class ISpeech * __thiscall CSpeechManager::GetDefaultSpeech(void)" (?GetDefaultSpeech@CSpeechManager@@QAEPAVISpeech@@XZ) 中被引用
1>QQDLL.obj : error LNK2019: 无法解析的外部符号 "void __cdecl DebugMsg(char const *,...)" (?DebugMsg@@YAXPBDZZ),该符号在函数 "public: static unsigned long __stdcall CSpeechManager::ReadingLoopThread(void *)" (?ReadingLoopThread@CSpeechManager@@SGKPAX@Z) 中被引用
1>..\ssnmate\Debug\QQDLL.dll : fatal error LNK1120: 3 个无法解析的外部命令
这是怎么回事呀?怎么解决呀?


解决方案1:

有一个解决方案,有两个工程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

解决方案2:

project-属性--link--输入--依赖库: 添加相应的库文件(可能是SpeechManager.lib)

解决方案3:

这种情况一般都是函数只找到声明但没有实现,或者是少了什么链接库,你可以试试把那两个.h和.c文件直接加入工程中再试试

解决方案4:

把源码拿出来看看;

解决方案5:

http://blog.csdn.net/friday5pm/archive/2007/03/08/1523859.aspx
碰到“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即可。

解决方案6:

链接错误,你有需要的lib没有加入链接

解决方案7:

#include "..\SpeechManager.h" 

#include "..\\SpeechManager.h" 
或者
#include "../SpeechManager.h" 试试


以上介绍了“ error LNK2019: 无法解析的外部符号”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3743375.html

相关图片

相关文章