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
}

另一方面,如果我将 fun() 设为静态,它不会给我任何链接器错误。但我不想让 fun() 成为静态的

4

2 回答 2

0

我认为这是调用约定问题。

请尝试以下代码:

class gph 
{
public:

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

};
于 2010-08-06T02:38:08.817 回答
0

我从事的大部分工作都与静态链接库有关,因此此答案可能不适用,但可能会提示您解决问题。因此,基于此以及我现在正在查看的内容,我的第一个想法是检查您正在构建的 dll 中是否包含静态库。

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

由于我不怎么使用 DLL,所以我对它们的理解类似于构建可执行文件。如果您在构建时使用动态链接,则您链接到的库的路径嵌入在您的可执行文件中,因此您的可执行文件大小更小,但取决于它们链接到的库路径是否移动。

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

于 2010-02-03T12:43:25.107 回答