页面树结构
转至元数据结尾
转至元数据起始

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 安装方式

  • 对于Ubuntu/Debian:
sudo apt-get update
sudo apt-get install libc6 libstdc++6 libgcc1 libm6
  • 对于 CentOS/RHEL:
sudo yum install glibc libstdc++ libgcc libm
  • 对于windows:

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

方法2:手动复制DLL文件

  • 找到缺失的DLL文件

  • 复制到应用程序目录或系统目录(通常在 C:\Windows\System32\ 目录下

  • 注册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 查看)。

查找顺序(简化):

  • DT_RPATH/DT_RUNPATH(库文件内嵌路径)

  • LD_LIBRARY_PATH 环境变量

  • /etc/ld.so.cache(系统缓存)

  • /lib, /usr/lib, /usr/local/lib

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

2)Windows (LoadLibrary)

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

查找顺序(简化):

  • 调用 LoadLibrary 时指定的目录

  • 程序当前目录

  • System32、Windows 目录

  • PATH 环境变量

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

3)macOS (dyld)

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

查找顺序(简化):

  • @rpath、@loader_path、@executable_path

  • DYLD_LIBRARY_PATH 环境变量

  • 系统默认路径 /usr/lib 等



  • 无标签