链接具有内联函数的静态库的问题

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当从另一个项目链接到库时,关键字是否有任何影响(我猜它确实如此,但我不确定)?

sbi*_*sbi 5

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 功能具有这样调用该函数是可见的.