静态成员访问链接器问题

时间:2010-02-02 13:47:59

标签: c++ static-members

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()作为静态,它不会给我任何链接器错误。但我不想把乐趣()视为静态

2 个答案:

答案 0 :(得分:0)

我工作的大部分内容都涉及静态链接库,所以这个答案可能不适用,但可能会让你知道这个问题。所以基于这个和我现在正在看的东西,我的第一个想法是检查你正在构建的dll,你已经包含了静态库。

未解析的符号通常表示签名不匹配或者您不包含必要的库。它因编译器而异,但大多数都会让您指定库目录(有时在命令行中用-L表示)和要链接的实际库(有时用-l表示)。

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

因此,当您构建DLL时,请确保已为类gph编译了cpp并为其创建了静态库。然后,当您在A类中使用它时,在库中包含标题和链接。

答案 1 :(得分:0)

我认为这是召集会议的问题。

请尝试以下代码:

class gph 
{
public:

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

};