gph是一个没有getInstance方法的单例类
class gph
{
public:
static void newfun();
static void newfun1();
//...//
private:
gph();
};
此类构建到静态库
现在我有一个Dll,我需要访问静态函数。所以A类是Dll的一部分
我有一个C ++成员函数说
void A:: fun()
{
gph::newfun() ; //accessing a static function : gives linker errors
}
另一方面,如果我将fun()作为静态,它不会给我任何链接器错误。但我不想把乐趣()视为静态
答案 0 :(得分:0)
我工作的大部分内容都涉及静态链接库,所以这个答案可能不适用,但可能会让你知道这个问题。所以基于这个和我现在正在看的东西,我的第一个想法是检查你正在构建的dll,你已经包含了静态库。
未解析的符号通常表示签名不匹配或者您不包含必要的库。它因编译器而异,但大多数都会让您指定库目录(有时在命令行中用-L表示)和要链接的实际库(有时用-l表示)。
由于我没有那么多使用DLL,我对它们的理解与构建可执行文件类似。如果在构建时使用动态链接,则链接库的路径将嵌入到可执行文件中,因此可执行文件的大小较小,但依赖于它们在不移动时链接到的库路径。
因此,当您构建DLL时,请确保已为类gph编译了cpp并为其创建了静态库。然后,当您在A类中使用它时,在库中包含标题和链接。
答案 1 :(得分:0)
我认为这是召集会议的问题。
请尝试以下代码:
class gph
{
public:
static void __cdecl newfun();
//...//
};