【发布时间】:2013-04-29 14:06:25
【问题描述】:
目前我有一个应用程序和一个(静态)库,都是用 Qt 编写的。作为构建系统,我使用 cmake。我将带有target_link_libraries 的库链接到可执行文件,一切正常(我有一个文件/可执行文件)。
但现在我想使用共享库。使用add_library 和关键字SHARED 创建一个共享库是可行的,但我对如何加载共享库的方式有点困惑。我看到了两种“方式”:
- 编写一个库并使用
Q_DECL_EXPORT/Q_DECL_IMPORT。他们使用QLibrary加载库并使用类型转换来解析所有 (C) 函数 - 编写一个库并将头文件包含在应用程序中。使用 cmake 命令
target_link_libraries将共享库“传递”到可执行文件。他们不使用 QLibrary 来加载库。
现在我有几个问题:
- 加载共享库的常用(“正常”)方法是什么?使用 __cdecl 将所有 C++ 方法导出到 C 函数(方式 1)或包含头文件(方式 2)?其他解决方案?
- 与方式 2(包括标头)相关 - 库是如何加载的?通过操作系统?如果我移动库,应用程序找不到库 -> 库在运行时加载?
- 有没有办法在不包含头文件的情况下加载库或在编译时使用它(在运行时加载库)?我读到有一种方法,但这并不容易
希望我的问题是清楚的,不要“白痴”,否则请写评论
【问题讨论】:
标签: c++ qt4 cmake shared-libraries