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