Pet*_*erK 2 c++ linker inline static-libraries
我有一个静态库,其中(除其他外)实现了一个微小的函数,只返回一个const字符串表中的字符串.此函数不会在库中的任何位置调用,但仍然声明为inline
.为清楚起见,它看起来像这样:
namespace flow
{
inline const char* GetName( BYTE methodType );
}
Run Code Online (Sandbox Code Playgroud)
和实施:
const char* flow::GetName( BYTE methodType )
{
if ( methodType < 5 )
return cszNameTable[ methodType ];
return NULL;
}
Run Code Online (Sandbox Code Playgroud)
在另一个项目中,我正在链接这个库.我有正确的.h文件,我有using namespace flow;
我的代码.问题是,我收到链接器错误:
error LNK2001: unresolved external symbol "char const * __cdecl flow::GetName(unsigned char)" (?GetName@flow@@YAPBDE@Z)
Run Code Online (Sandbox Code Playgroud)
现在我可以通过从静态库中的函数声明中删除"inline"关键字来轻松解决此问题.所以这是我的问题:
1)为什么会出现此错误?如何在不修改静态库源代码的情况下修复它(不删除内联关键字)?
2)inline
在未在库本身内部调用的静态库函数中使用关键字有什么好处?inline
当从另一个项目链接到库时,关键字是否有任何影响(我猜它确实如此,但我不确定)?
1)为什么会出现此错误?如何在不修改静态库源代码的情况下修复它(不删除内联关键字)?
将函数声明为没有意义inline
.你必须在标题中定义它们:
namespace flow
{
inline const char* GetName( BYTE methodType )
{
if ( methodType < 5 )
return cszNameTable[ methodType ];
return NULL;
}
}
Run Code Online (Sandbox Code Playgroud)
2)在未在库本身内部调用的静态库函数中使用inline关键字有什么好处?当从另一个项目链接库时,内联关键字是否有任何影响(我猜它确实如此,但我不确定)?
的作用inline
就是可以和必须,定义头中的功能,因为在执行一个的 inline
功能具有这样调用该函数是可见的.