⌘+k ctrl+k
1.1.3 (stable)
Search Shortcut cmd + k | ctrl + k
Building Instructions

Prerequisites

DuckDB 需要 CMake 和一个符合 C++11 标准的编译器(例如,GCC、Apple-Clang、MSVC)。 此外,我们推荐使用 Ninja 构建系统,它可以自动并行化构建过程。

UNIX-Like Systems

macOS 软件包

安装Xcode和Homebrew。然后,使用以下命令安装所需的包:

brew install git cmake ninja

Linux 包

使用您的发行版的包管理器安装所需的包。

Ubuntu 和 Debian

sudo apt-get update && sudo apt-get install -y git g++ cmake ninja-build libssl-dev

Fedora, CentOS, 和 Red Hat

sudo yum install -y git g++ cmake ninja-build openssl-devel

Alpine Linux

apk add g++ git make cmake ninja

请注意,Alpine Linux 使用 musl libc 作为其 C 标准库。 没有为 musl libc 分发的官方二进制文件,但可以按照本页的说明手动构建 DuckDB。

克隆仓库

克隆DuckDB仓库:

git clone https://github.com/duckdb/duckdb

我们建议创建存储库的完整克隆。请注意,该目录大约使用1.3 GB的磁盘空间。

构建DuckDB

要构建DuckDB,我们使用一个Makefile,它反过来调用CMake。我们还建议使用Ninja作为CMake的生成器。

GEN=ninja make

最佳实践 不建议直接调用CMake,因为Makefile设置了一些对正确构建包至关重要的变量。

一旦构建成功完成,你可以在build目录中找到duckdb二进制文件:

build/release/duckdb

链接扩展

为了测试,构建带有静态链接核心扩展的DuckDB可能很有用。为此,请运行:

CORE_EXTENSIONS='autocomplete;httpfs;icu;json;tpch' GEN=ninja make

此选项还接受树外扩展:

CORE_EXTENSIONS='autocomplete;httpfs;icu;json;tpch;delta' GEN=ninja make

有关更多详细信息,请参阅“构建扩展”页面

Windows

在Windows上,DuckDB需要Microsoft Visual C++ Redistributable包作为构建时和运行时的依赖项。请注意,与类UNIX系统上的构建过程不同,Windows构建直接调用CMake。

Visual Studio

要在Windows上构建DuckDB,我们建议使用Visual Studio编译器。 要使用它,请按照CI工作流程中的说明操作:

python scripts/windows_ci.py
cmake \
    -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_GENERATOR_PLATFORM=x64 \
    -DENABLE_EXTENSION_AUTOLOADING=1 \
    -DENABLE_EXTENSION_AUTOINSTALL=1 \
    -DDUCKDB_EXTENSION_CONFIGS="${GITHUB_WORKSPACE}/.github/config/bundled_extensions.cmake" \
    -DDISABLE_UNITY=1 \
    -DOVERRIDE_GIT_DESCRIBE="$OVERRIDE_GIT_DESCRIBE"
cmake --build . --config Release --parallel

MSYS2 和 MinGW64

在Windows上,DuckDB也可以使用MSYS2MinGW64进行构建。 请注意,此构建仅出于兼容性原因而支持,只有在给定平台上无法使用Visual Studio构建时才应使用。 要使用MinGW64构建DuckDB,请使用Pacman安装所需的依赖项。 当提示Enter a selection (default=all)时,通过按Enter选择默认选项。

pacman -Syu git mingw-w64-x86_64-toolchain mingw-w64-x86_64-cmake mingw-w64-x86_64-ninja
git clone https://github.com/duckdb/duckdb
cd duckdb
cmake -G "Ninja" -DCMAKE_BUILD_TYPE=Release -DBUILD_EXTENSIONS="icu;parquet;json"
cmake --build . --config Release

一旦构建成功完成,你可以在仓库的目录中找到 duckdb.exe 二进制文件:

./duckdb.exe

Android

DuckDB 对 Android 有实验性支持。请使用 DuckDB 的最新 main 分支,而不是稳定版本。

使用Android NDK构建DuckDB库

我们提供了使用macOS和Android Studio的设置构建说明。对于其他设置,请相应地调整步骤。

  1. 打开 Android Studio。 选择 Tools 菜单并选择 SDK Manager。 选择 SDK Tools 选项卡并勾选 NDK (Side by side) 选项。 点击 OK 进行安装。

  2. 设置 Android NDK 的位置。例如:

    ANDROID_NDK=~/Library/Android/sdk/ndk/28.0.12433566/
    
  3. 设置 Android ABI。例如:

    ANDROID_ABI=arm64-v8a
    

    或者:

    ANDROID_ABI=x86_64
    
  4. 如果你想使用Ninja构建系统,请确保它已安装并在PATH上可用。

  5. 设置要构建的DuckDB扩展列表。这些将静态链接到二进制文件中。例如:

    DUCKDB_EXTENSIONS="icu;json;parquet"
    
  6. 导航到DuckDB的目录并按如下方式运行构建:

    PLATFORM_NAME="android_${ANDROID_ABI}"
    BUILDDIR=./build/${PLATFORM_NAME}
    mkdir -p ${BUILDDIR}
    cd ${BUILDDIR}
    cmake \
        -G "Ninja" \
        -DEXTENSION_STATIC_BUILD=1 \
        -DDUCKDB_EXTRA_LINK_FLAGS="-llog" \
        -DBUILD_EXTENSIONS=${DUCKDB_EXTENSIONS} \
        -DENABLE_EXTENSION_AUTOLOADING=1 \
        -DENABLE_EXTENSION_AUTOINSTALL=1 \
        -DCMAKE_VERBOSE_MAKEFILE=on \
        -DANDROID_PLATFORM=${ANDROID_PLATFORM} \
        -DLOCAL_EXTENSION_REPO="" \
        -DOVERRIDE_GIT_DESCRIBE="" \
        -DDUCKDB_EXPLICIT_PLATFORM=${PLATFORM_NAME} \
        -DBUILD_UNITTESTS=0 \
        -DBUILD_SHELL=1 \
        -DANDROID_ABI=${ANDROID_ABI} \
        -DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake \
        -DCMAKE_BUILD_TYPE=Release ../..
    cmake \
        --build . \
        --config Release
    
  7. 对于arm64-v8a ABI,构建将生成build/android_arm64-v8a/duckdbbuild/android_arm64-v8a/src/libduckdb.so二进制文件。

在Termux中构建CLI

要在Termux应用程序中构建命令行客户端,请安装以下软件包:

pkg install -y git ninja clang cmake python3

克隆DuckDB仓库并按如下方式构建:

mkdir build
cd build
export LDFLAGS="-llog"
cmake \
    -G "Ninja" \
    -DBUILD_EXTENSIONS="" \
    -DDUCKDB_EXPLICIT_PLATFORM=linux_arm64_android \
    -DCMAKE_BUILD_TYPE=Release \
    ..
cmake --build . --config Release

请注意,您也可以使用Python客户端:

pip install --pre --upgrade duckdb

Raspberry Pi (32位)

在32位的Raspberry Pi板上,你需要添加-latomic链接标志。 由于此平台不分发扩展,建议在构建时也包含它们。 例如:

mkdir build
cd build
cmake .. \
    -DCORE_EXTENSIONS="httpfs;json;parquet" \
    -DDUCKDB_EXTRA_LINK_FLAGS="-latomic"
make -j4

Troubleshooting

构建内存不足

Ninja 并行化构建,这可能会导致资源有限的系统出现内存不足的问题。 这些问题也报告在 Alpine Linux 上发生,尤其是在资源有限的机器上。 在这些情况下,通过将 Makefile 生成器设置为空(GEN=)来避免使用 Ninja:

GEN= make