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也可以使用MSYS2和MinGW64进行构建。
请注意,此构建仅出于兼容性原因而支持,只有在给定平台上无法使用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的设置构建说明。对于其他设置,请相应地调整步骤。
-
打开 Android Studio。 选择 Tools 菜单并选择 SDK Manager。 选择 SDK Tools 选项卡并勾选 NDK (Side by side) 选项。 点击 OK 进行安装。
-
设置 Android NDK 的位置。例如:
ANDROID_NDK=~/Library/Android/sdk/ndk/28.0.12433566/
-
设置 Android ABI。例如:
ANDROID_ABI=arm64-v8a
或者:
ANDROID_ABI=x86_64
-
如果你想使用Ninja构建系统,请确保它已安装并在
PATH
上可用。 -
设置要构建的DuckDB扩展列表。这些将静态链接到二进制文件中。例如:
DUCKDB_EXTENSIONS="icu;json;parquet"
-
导航到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
-
对于
arm64-v8a
ABI,构建将生成build/android_arm64-v8a/duckdb
和build/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