0

我正在尝试用 c++ 编写一个跨平台程序,该程序将在运行时加载某些模块(共享库)。为此,我使用了Poco C++ Libraries中的 ClassLoader 。我使用 autoconf、automake 和 libtool 编写了一个编译链。这在 Linux 环境中应该没有问题,但是在 Windows 中会出现问题。我在编译时使用了 MinGW 和 MSYS,以便能够使用我的 Makefile。ClassLoader 使用 Windows 特定的 LoadLibrary() 函数来加载模块,这意味着我必须将它们编译为 DLL。

我编译到库中的类继承了主应用程序中的另一个类。然后,当我尝试运行 make 时,它​​会抱怨很多未定义的引用并拒绝构建共享库。我想这是因为名字修饰。还是因为我不能继承库之外的类?(该类不包含在库的源代码中,但找到了头文件)

我不太确定我坚持在 MinGW + MSYS 下编译但仍然使用 LoadLibrary() 会带来多少麻烦。有这方面经验的人吗?

4

1 回答 1

0

在 Windows 下,DLL 必须在构建时解析其所有符号。在 Unix 下,您可以在加载时才解决问题,并且此行为当前已包含在您的设计中。

要改变这一点,您可能必须将主应用程序中的基类(以及 DLL 依赖的所有其他内容)分解为它自己的 DLL。这样,当您链接您的子类库时,它可以链接到新的 DLL 并完全解析它的符号。问题是,您必须能够构建这个新的 DLL 并解析所有符号。

于 2012-04-20T20:29:47.257 回答