将Qt共享库与应用程序和cmake一起使用的常用方法

时间:2013-04-29 14:06:26

标签: c++ qt4 cmake shared-libraries

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

但现在我想使用共享库。使用add_library和关键字SHARED创建共享库是有效的,但我对如何加载共享库的方式感到困惑。我看到了两种“方式”:

  1. 撰写图书馆并使用Q_DECL_EXPORT / Q_DECL_IMPORT。他们使用QLibrary加载库并使用类型转换来解析所有(C)函数
  2. 编写库并在应用程序中包含头文件。使用cmake命令target_link_libraries将共享库“传递”到可执行文件。他们不使用QLibrary加载库。
  3. 现在我有几个问题:

    1. 加载共享库的常见(“正常”)方式是什么?使用__cdecl(方式1)将所有C ++方法导出到C函数或包含头文件(方式2)?其他解决方案?
    2. 与方式2(包括标题)相关 - 如何加载库?通过操作系统?如果我移动库,应用程序找不到库 - >库在运行时加载?
    3. 有没有办法在不包含标题的情况下加载库或在编译时使用它(在运行时加载库)?我读到有一种方法,但这并不容易
    4. 我希望我的问题清楚,而不是“noobish”,否则请写评论

1 个答案:

答案 0 :(得分:0)

  1. 我想第二种方式更常见,但我遇到了两种方式。
  2. 第二种方式是在应用程序启动时由os加载库。如果操作系统找不到库 - 应用程序将无法启动。
  3. 无论您使用哪种方法,都需要了解函数的语义。这意味着您将以这种或那种方式包含包含它们的标题。
  4. 此外,Qt为您提供了另一种使用插件方法在运行时加载库的方法:link