.obj 文件中有关 FreeType 库类析构函数的未解析外部 T::~T

问题描述 投票:0回答:1

以或多或少的良好方式解决了这个问题之后: 如何将 Borland 6 C++ 项目从包含 indy.bpi 更新为 indy60.bpi?

...我现在遇到了另一个困难: 我现在在 .obj 文件中有“未解析的外部”析构函数: 我之前已经见过这个错误: 这似乎是虚拟析构函数的问题,应该什么都不实现: T::~T() { } ; (或=空;)

问题在于相关的析构函数位于 FreeType 库中。因此,我认为它写得很好,并且不愿意修改它的析构函数......

=> 有人知道编译 FreeType 库时 .obj 文件中未解决的外部析构函数的问题吗?

c++ external destructor freetype object-files
1个回答
0
投票

我还没有使用过 FreeType,但我猜析构函数是直接在类声明中定义的。这意味着它们被隐式声明为内联。根据您的编译器,这将阻止析构函数包含在生成的任何库文件中的外部链接中。

现在该做什么:

  • 检查您是否错过了 FreeType 所需的任何库。在类 Unix 操作系统上,您可以使用 nm 命令检查析构函数代码是否包含在库文件中(请参阅手册页)。

  • 检查 FreeType 文档,这是否是已知问题或是否存在更新版本

  • 更改包含这些类的头文件,使析构函数成为非内联并将其定义移动到单独的文件中:

    A类{ ... 虚拟 ~A() {} }

成为

class A {
  ...
  virtual ~A();
}

并在单独的文件中提供:

A::~A() {}
© www.soinside.com 2019 - 2024. All rights reserved.