用VC ++在VS2005上的链接器问题

时间:2009-07-23 20:24:34

标签: c++ visual-studio visual-studio-2005

以下是该方案:

平台: VS2005和语言是VC ++

情况: 只有一个装配CMPW32。它有2个项目: 1是一个名为CMPW32的DLL项目,第二个是名为Driver的.exe项目 它们在主程序集文件夹下共享相同的Debug文件夹。 我已经能够从DLL中成功导出一些函数。 Driver项目访问其中一个导出函数。 (首先,如果需要为SAME程序集中的项目导出函数以便能够使用它们,我不是。我可以只包含头文件并使用我认为的函数。)

以下是来自某些文件的几行代码,您可能会发现这些代码可用于分析我的问题:

//main.cpp file from the Driver project which is meant to generate Driver.exe

#pragma comment(lib, "winmm.lib")
#include <CM.h>
#include "conio.h"
#include "CMM.h"
#include "CMF.h"
#define C_M_F    _T("c:\\CannedMessages.en-US")
int_tmain (int argc, TCHAR* argv [])
{
    CMM myobjModel;
    CMF::Read (CANNED_MESSAGES_FILE, myobjModel);
    getch();
}

//CMM.h file
#ifndef C_M_M
#define C_M_M
#include "CMD.h"
#include "CMC.h"
#include "CM.h"
#define _C_M_DLL
#include "CMP.h"
class CM_DLL_API CMM
{  //some code here...
}


//CMF.h
#ifndef C_M_F
#define C_M_F
#include "CMM.h"
#define _C_M_DLL
#include "CMP.h"
class CM_DLL_API CMF 
{ //some code here...
}

//CMP.h
#ifndef C_M_P
#define C_M_P
#include "CMD.h"
#define C_M_B_F   _T("CannedMessages.")
#ifdef _C_M_DLL
#define CM_DLL_API __declspec( dllexport ) 
#else
#define CM_DLL_API __declspec( dllimport )
#endif
extern "C"
{
//list of functions to be exported..
}

构建解决方案的错误:

  

错误13错误LNK2019:函数_wmain main.obj中引用了未解析的外部符号“public:__thiscall CMM :: ~CMM(void)”(?? 1CMM @@ QAE @ XZ)

     

Error15致命错误LNK1120:2个未解析的外部C:\“somepath这里我不能透露”\ Projects \ CMPW32 \ Debug \ Driver.exe

请注意:如果我选择仅构建CMPW32 DLL项目,则没有错误,并且在调试文件夹中生成CMPW32.dll文件,并导出正确的函数。 然而,似乎有一些非常明显的链接问题,我不知道发生了什么。我已经包含了所有必需的文件,并且还在“项目设置”的输入中输入了所需的.lib。路径也已正确设置。

如果有人可以帮我解决这个问题,那将会非常有帮助。如果需要其他信息,请告知。

谢谢, Viren

1 个答案:

答案 0 :(得分:3)

看起来您的Driver.exe项目不包含CMM类的CPP源文件,可能是CMM.cpp。

您已在.H文件(CMM.H)中声明了CMM类的析构函数,并忘记在.CPP文件(CMM.CPP)中实现它。