2013-04-29 82 views
0

目前我有一个应用程序和一个(静态)库,都是用Qt编写的。作为构建系统,我使用cmake。我将库与target_link_libraries链接到可执行文件,一切工作正常(我有一个文件/可执行文件)。在应用程序和cmake中使用Qt共享库的常见方法

但现在我想使用共享库。创建一个共享库add_library和关键字SHARED的作品,但我有点困惑的方式,如何加载共享库。我看到了两个 “办法”:

  1. 写一个库,并使用Q_DECL_EXPORT/Q_DECL_IMPORT。他们使用QLibrary加载库并使用类型转换来解析所有(C)函数
  2. 编写库并将头文件包含在应用程序中。共享库通过cmake命令target_link_libraries“传递”给可执行文件。他们不使用QLibrary来加载库。

现在我有几个问题:

  1. 什么是普通(“正常”)的方式来加载共享库?使用__cdecl(方法1)将所有C++方法导出到C函数或包含头文件(方式2)?其他方案?
  2. 与方式2(包含标题)相关 - 库如何加载?由操作系统?如果我移动库,应用程序无法找到库 - >在运行时加载的库?
  3. 有没有一种方法来加载一个库,而不包括头或在编译时使用它(运行时加载库)?我看了有一种方法,但它不是那么容易

我希望我的问题是明确的,而不是“noobish”,否则请写一个评论

回答

0
  1. 我想第二个办法是更常见,尽管我遇到了两个。
  2. 第二种方式库在应用程序启动时由os加载。如果操作系统找不到库 - 应用程序将无法启动。
  3. 无论您使用哪种方法,您都需要知道函数的语义。这意味着您将包含标题,其中包含它们,这样或那样。

而且Qt的为您提供了另一种方式来加载运行库,使用插件方法:link

相关问题