【发布时间】:2014-05-15 10:25:55
【问题描述】:
我有 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
【问题讨论】:
-
如何将 .cpp 文件(或包含项目的库)链接到 'other' 项目?
-
我们使用的是Visual Studio 2008。定义常量的项目作为引用添加到另一个项目的公共属性中,以及一个附加的C++属性中的包含目录。如果这就是你的意思。在另一个第三个项目中,我们实际上也声明了一些静态类常量,这些常量在使用它们时不会出现链接错误。您希望我粘贴命令行选项作为回复吗?
-
比发布附加信息作为回复的 cmets 更好的是编辑您的问题并将其放在那里。我可以认为它包含有用的信息来诊断您的问题。
-
使用链接器命令行选项修改的问题。
-
我不太确定这是否适用于 MSVC-Linker,但对于 GCC,库的顺序在某些情况下指定很重要(在链接它们之前必须看到符号)。可能这有帮助/值得调查。
标签: c++ linker-errors unresolved-external lnk2001