2010-02-02 94 views
0

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 
} 

在另一方面,如果我取笑()静态它不给我任何链接错误。但我不想取笑()静态

+1

如果你得到链接错误,则是最有可能出现在声明和定义(的.cpp/.h)中的成员函数的签名不同。 – 2010-02-02 13:54:50

+4

您能告诉我们错误是什么 – Yacoby 2010-02-02 13:55:45

+5

您需要向我们展示更多代码 - 例如,gph的定义及其与A的关系。 – 2010-02-02 13:59:02

回答

0

大部分是我与静态链接库的交易工作,所以这个答案可能并不适用,但可能的线索你的问题。因此,基于这一点以及我现在看到的内容,我的第一个想法是检查您正在构建的dll中是否包含静态库。

一个悬而未决的符号通常意味着,无论是签名不匹配,或者你没有包括必要的库。它从不同的编译器编译器,但最让你指定库目录(有时-L在命令行表示)和被链接的实际库(有时-l表示)。

因为我不使用DLL的那么多,我对他们的理解是类似于建立一个可执行文件。如果在构建时使用动态链接,则链接到的库的路径将嵌入到可执行文件中,因此可执行文件的大小较小,但依赖于链接的库路径而不移动。

所以,当你建立你的DLL时,确保你编译了gph类的cpp并为它创建了一个静态库。然后,当你在A类中使用它时,你需要在库中包含标题和链接。

0

我觉得是调用约定问题。

请尝试以下代码:

class gph 
{ 
public: 

    static void __cdecl newfun(); 
    //...// 

};