提问人:Lólindir 提问时间:4/3/2014 最后编辑:πάντα ῥεῖLólindir 更新时间:4/8/2014 访问量:12364
链接错误 LNK2001:未解析的外部符号 (Visual Studio 2008)
Linking error LNK2001: unresolved external symbol (Visual Studio 2008)
问:
我有 3 个链接错误,我无法摆脱。
我在类的头文件中定义了一些自己的用户定义类型的静态公共类常量。接下来,我在 cpp 文件中声明并初始化了类常量。我可以在类本身中使用这些常量。但是,当我尝试在另一个项目中使用常量时,我收到一个链接错误:
error LNK2001: unresolved external symbol "public: static class EFString const CEFMldEreignis::s_typeMelderSteuern"
我不知道这里出了什么问题。有人有想法吗?
提前非常感谢!
头文件:
class LIB_EXPORT CEFMldEreignis : public CBusinessObjekt
{
...
public:
static const EFString s_typeMelderSteuern;
...
};
CPP 文件:
#include "EFMldEreignis.h"
const EFString CEFMldEreignis::s_typeMelderSteuern = _T("S");
我们使用的是 Visual Studio 2008。 定义常量的项目将作为引用添加到其他项目的公共属性中,并在 C++ 属性中添加其他包含目录。
在另一个第三个项目中,我们实际上也声明了一些静态类常量,这些常量在使用它们时不会出现链接错误。
链接器命令行(所有选项):
(备注:EuroAllgemeineMasken 是使用常量的“其他”项目;EuroMelder 是定义和声明常量的项目。
/OUT:"C:\Eldis3\trunk\ELDIS\Workspace\..\Debug\EuroAllgemeineMasken.dll" /INCREMENTAL
/NOLOGO /LIBPATH:"C:\Eldis3\trunk\ELDIS\Workspace\..\Debug"
/LIBPATH:"C:\Eldis3\trunk\ELDIS\Workspace\\..\..\Lib\External\SST"
/LIBPATH:"C:\Eldis3\trunk\ELDIS\Workspace\\..\..\Lib\External\ELDIS" /DLL /MANIFEST
/MANIFESTFILE:"Debug\EuroAllgemeineMasken.dll.intermediate.manifest"
/MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /
PDB:"C:\Eldis3\trunk\ELDIS\Workspace\..\Debug\EuroAllgemeineMasken.pdb"
/SUBSYSTEM:WINDOWS /DYNAMICBASE:NO
/IMPLIB:"C:\Eldis3\trunk\ELDIS\Workspace\..\Debug\EuroAllgemeineMasken.lib" /MACHINE:X86
/ERRORREPORT:PROMPT ..\..\ELDIS\Debug\CEDVToolsEldis.lib ..\..\ELDIS\Debug\EuroTetra.lib
..\..\ELDIS\Debug\Services.lib ..\..\ELDIS\Debug\ServiceManager.lib
..\..\ELDIS\Debug\CESocketUDP.lib ..\..\ELDIS\Debug\EuroLWZ.lib
..\..\ELDIS\Debug\EuroRouting.lib ..\..\ELDIS\Debug\MassnahmeTools.lib
..\..\ELDIS\Debug\EuroDispo.lib ..\..\ELDIS\Debug\EuroMass.lib
..\..\ELDIS\Debug\BCGControlBar.lib ..\..\ELDIS\Debug\EuroFlug.lib
..\..\ELDIS\Debug\EuroMFCTools.lib ..\..\ELDIS\Debug\EuroLog.lib
..\..\ELDIS\Debug\EuroGis.lib ..\..\ELDIS\Debug\EuroDialoge.lib
..\..\ELDIS\Debug\CECrystalReport.lib ..\..\ELDIS\Debug\EuroInfo.lib
..\..\ELDIS\Debug\EuroIO.lib ..\..\ELDIS\Debug\EuroPers.lib
..\..\ELDIS\Debug\EuroStatus.lib ..\..\ELDIS\Debug\CELTextEldis.lib
..\..\ELDIS\Debug\EuroBers.lib ..\..\ELDIS\Debug\EuroMelder.lib
..\..\ELDIS\Debug\EuroLeit.lib ..\..\ELDIS\Debug\LOVDialog.lib
..\..\ELDIS\Debug\EuroFunk.lib ..\..\ELDIS\Debug\EuroEsta.lib
..\..\ELDIS\Debug\EuroOrt.lib ..\..\ELDIS\Debug\EuroEinsatz.lib
..\..\ELDIS\Debug\Gms.lib ..\..\ELDIS\Debug\GMTs.lib ..\..\ELDIS\Debug\EuroAdmin.lib
..\..\ELDIS\Debug\EuroOber.lib ..\..\ELDIS\Debug\EFBusiness.lib
..\..\ELDIS\Debug\EuroTools.lib ..\..\ELDIS\Debug\DBAccess.lib
..\..\ELDIS\Debug\DynamicWindows.lib
答:
1赞
Lólindir
4/8/2014
#1
dllexport 和 dllimport 语句存在问题。 某些项目共享相同的LIB_EXPORT指令。这被定义为:
#if defined(_USRDLL) || (defined(_AFXDLL) && defined(_AFXEXT))
#define LIB_EXPORT __declspec(dllexport)
#else
#define LIB_EXPORT __declspec(dllimport)
#endif
然而,这似乎无法正常工作。我们现在为每个项目定义一个单独的指令,如下所示:
#ifdef BUILD_EUROMELDER_DLL
#undef EUROMELDER_EXPORT
#define EUROMELDER_EXPORT __declspec (dllexport)
#else
#undef EUROMELDER_EXPORT
#define EUROMELDER_EXPORT __declspec (dllimport)
#endif
这样就解决了问题。
评论