静态链接

要静态链接并使用多个驱动程序,需要遵循以下限制:

  1. 您必须使用以下 CMake 选项进行构建 [1]

    • -DADBC_BUILD_STATIC=ON

    • -DADBC_DEFINE_COMMON_ENTRYPOINTS=OFF

    • -DADBC_WITH_VENDORED_FMT=OFF

    • -DADBC_WITH_VENDORED_NANOARROW=OFF

  2. 您必须提供 fmtnanoarrow 依赖项。(将来可能会放宽此限制。)

  3. 您必须明确链接所有必需的传递依赖项。这些依赖项包括:

    • PostgreSQL 的 libpq

    • SQLite 的 sqlite3

    • 对于 PostgreSQL 或 SQLite,需要 adbc_driver_commonadbc_driver_frameworkfmtnanoarrow 以及 C++ 标准库。

    • 要链接 C++ 标准库,最简单的方法是直接使用 C++ 链接器,即使代码本身是 C 语言编写的,例如:

      set_target_properties(myapp PROPERTIES LINKER_LANGUAGE CXX)
      
    • 基于 Go 的驱动程序(BigQuery、Flight SQL、Snowflake)没有传递依赖项。

  4. 您不能链接多个基于 Go 的驱动程序。有关相关问题的讨论,请参阅 golang/go#20639StackOverflow #67243572StackOverflow #34333107。(将来可能会通过提供一种方法来构建包含所有驱动程序实现的单一驱动程序库来放宽此限制。)

您可以在源代码树中的 cpp_static_test.shc/integration/static_test 中看到一个示例。