mco_core_load
此函数动态加载 SmartEDB 库。
MCO_RET mco_core_load(
mco_bool disk,
mco_bool mvcc,
mco_bool shmem,
const char *sync_library,
const char *memory_library,
const char *runtime_path
);
参数
disk
mco_bool
- 非零值(
MCO_YES
)表示加载磁盘库; - 零值(
MCO_NO
)表示加载内存库。
mvcc
mco_bool
- 非零值(MCO_YES)表示加载 MVCC 事务管理器库;
- 零值(MCO_NO)表示加载 MURSIW 库。
shmem
mco_bool
- 非零值(MCO_YES)表示加载共享内存库;
- 零值(MCO_NO)表示加载常规内存库。
sync_library
const char
仅适用于 Unix-Linux 系统。
可选强制加载器加载特定的同步库 mcos*
。如果为 NULL
,则加载器在请求共享内存时将选择 mcoslnx
,否则选择 mcoslnxp
。
memory_library
const char
仅适用于 Unix-Linux 系统。
可选地强制加载器加载特定的内存库 mcom*
。如果为 NULL
,则加载器在请求共享内存时将选择 mcomipc
,否则选择 mcomconv
。
runtime_path
const char
适用于 Windows 和 Unix-Linux 系统。
覆盖 SmartEDB 库的搜索路径。
某些 SmartEDB 组件需要动态链接到 SmartEDB 库。最常见是需要在运行时选择核心配置(事务管理器、本地/共享内存、持久性等)。核心组件之间存在相互依赖关系。
- 在 Linux 和类 UNIX 平台上通常不是问题;
- 在 Windows 上提供作为单独 DLL配置,这些配置包含所有相互依赖的库以及发行版提供的任何额外库。
一个配置示例为**“MURSIW + 磁盘 + 共享内存 + 调试”**为使用动态核心配置的每个产品都提供了一整套配置。
此外,每个使用可配置内核的组件都必须手动设置 DLL 搜索路径、加载所需的配置共享库、处理平台相关问题等。
为了解决这些问题,提供了两个组件:
mcocore
: 本质上与xSQL、Java、.NET Framework 封装器是一组相同的库。它将所有相互依赖的库打包到配置中,在 Windows 系统上以单独的 DLL 形式提供。mcocore
不包含 SQL、集群、高可用性和其他组件。此外,在 UNIX 系统上不需要mcocore
。mcoloader
:此库导出单个函数mco_core_load()
,该函数允许应用程序选择核心配置,并提供指向实际 SmartEDB 核心函数(包括非静态内部函数)的“指针封装器”。 因此,应用程序无需链接 SmartEDB 核心静态库或动态加载它们,只需链接mcoloader
即可。当调用mco_core_load()
时,它会加载所需的配置的 DLL(在 UNIX 系统上为共享对象),并获取其所有函数的地址;核心函数的封装器将使用这些地址调用已加载的函数。这些函数在loaderimpl.c
文件中加载。此文件由一个脚本生成,不应手动修改。该脚本接收包含函数列表的文件,并生成所有必要的类型定义、变量、函数和加载器函数调用。mcoloader
目前适用于 Windows、Linux 和 macOS。为用户提供统一的核心配置接口。
返回
MCO_S_OK
已成功加载核心库。
MCO_E_CORE
核心库加载失败。