我有一个静态库(除其他外)实现了一个微型函数,该函数仅从const字符串表中返回一些字符串。在库中的任何地方都不会调用此函数,但仍将其声明为inline
。为了清楚起见,它看起来像这样:
namespace flow
{
inline const char* GetName( BYTE methodType );
}
和实现:
const char* flow::GetName( BYTE methodType )
{
if ( methodType < 5 )
return cszNameTable[ methodType ];
return NULL;
}
在另一个项目中,我正在链接该库。我包含正确的.h文件,并且我的代码中包含
using namespace flow;
。问题是,我收到链接器错误:error LNK2001: unresolved external symbol "char const * __cdecl flow::GetName(unsigned char)" (?GetName@flow@@YAPBDE@Z)
现在,我可以通过从静态库的函数声明中删除“inline”关键字来轻松解决此问题。所以这是我的问题:
1)为什么会出现此错误?如何在不修改静态库源代码的情况下(不删除inline关键字)对其进行修复?
2)在静态库函数中使用
inline
关键字有什么好处,该函数在库本身内部未调用?从另一个项目链接到库时,inline
关键字是否有任何作用(我想是的,但我不确定)? 最佳答案
将函数声明为inline
毫无意义。无论如何,您都必须在标题中定义:
namespace flow
{
inline const char* GetName( BYTE methodType )
{
if ( methodType < 5 )
return cszNameTable[ methodType ];
return NULL;
}
}
inline
的作用是,您可以而且必须在 header 中定义该函数,因为inline
函数的实现必须在调用该函数的位置可见。关于c++ - 与具有嵌入式功能的静态库链接时出现问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3203365/