1 背景

SQL引擎 V2.0 在运行过程中,对系统环境中的多种依赖组件有严格要求。若依赖组件缺失、版本不匹配或配置不当,可能导致 SQL 引擎无法正常启动,出现功能异常等问题。通过本自测指南,您能够系统地对SQL引擎V2.0 所需的依赖组件进行检查与确认,确保其处于良好运行状态,为 SQL引擎的稳定高效运行奠定基础。

2、常见系统依赖组件介绍

系统_架构

动态依赖库

说明

linux_amd64

libdl.so.2

动态链接库

libstdc++.so.6

C++ 标准库,最低 libstdc++.so.6.0.19

libm.so.6

数学库,最低 libm-2.17.so

libgcc_s.so.1

GCC 支持库,最低 gcc (GCC) 4.8.5

libc.so.6

C 标准库,最低 GLIBC_2.17

ld-linux-x86-64.so.2

动态链接器

linux_arm64

libdl.so.2

动态链接库

libstdc++.so.6

C++ 标准库,最低 libstdc++.so.6.0.19

libm.so.6

数学库,最低 libm-2.17.so

libgcc_s.so.1

GCC 支持库,最低 gcc (GCC) 4.8.5

libc.so.6

C 标准库,最低 GLIBC_2.17

ld-linux-aarch64.so.1

动态链接器

windows_amd64

ucrtbase.dll

Universal C Runtime


msvcp140.dll

Microsoft Visual C++ Runtime


msvcrt.dll

Microsoft Visual C Runtime


vcruntime140.dll

Visual C++ Runtime

windows32不支持



如果操作系统缺失此类依赖,需要自行安装解决, 更多平台支持:https://duckdb.org/docs/1.2/dev/building/overview

3 安装方式

sudo apt-get update
sudo apt-get install libc6 libstdc++6 libgcc1 libm6
sudo yum install glibc libstdc++ libgcc libm

方法1:安装Microsoft Visual C++ Redistributable(推荐)

方法2:手动复制DLL文件

4 动态依赖库依赖查找机制

1、加载主库时的依赖查找流程

 Java 层做了什么?

只负责定位主库文件(如 libfoo.so、foo.dll),并调用底层的 dlopen(Linux/macOS)或 LoadLibrary(Windows)加载它。

不会主动递归查找依赖库,也不会解析 ELF/PE/Mach-O 文件的依赖字段。


2、依赖库查找的详细机制

1)Linux (ELF, dlopen)

依赖声明:在 ELF 文件的 NEEDED 字段(可用 readelf -d libfoo.so 查看)。

查找顺序(简化):

递归加载:dlopen 会自动递归加载所有依赖库,遇到缺失会报错。

2)Windows (LoadLibrary)

依赖声明:PE 文件的 IMPORT TABLE。

查找顺序(简化):

递归加载:LoadLibrary 会自动递归加载所有依赖 DLL。

3)macOS (dyld)

依赖声明:Mach-O 文件的 LC_LOAD_DYLIB。

查找顺序(简化):