静态链接¶
若要静态链接并使用多个驱动程序,必须遵守以下限制:
必须使用以下 CMake 选项进行构建 [1]
-DADBC_BUILD_STATIC=ON-DADBC_DEFINE_COMMON_ENTRYPOINTS=OFF-DADBC_WITH_VENDORED_FMT=OFF-DADBC_WITH_VENDORED_NANOARROW=OFF
必须提供
fmt和nanoarrow依赖项。(未来可能会放宽此限制。)必须显式链接所有必需的传递依赖项。这些包括:
PostgreSQL 的
libpqSQLite 的
sqlite3对于 PostgreSQL 或 SQLite,还需要
adbc_driver_common、adbc_driver_framework、fmt、nanoarrow以及 C++ 标准库。链接 C++ 标准库最简单的方法是直接使用 C++ 链接器,即使代码本身是 C 语言编写的,例如:
set_target_properties(myapp PROPERTIES LINKER_LANGUAGE CXX)
基于 Go 的驱动程序(BigQuery、Flight SQL、Snowflake)没有传递依赖项。
你不能链接超过一个基于 Go 的驱动程序。有关所涉问题的讨论,请参阅 golang/go#20639、StackOverflow #67243572 以及 StackOverflow #34333107。(未来可能会通过提供一种构建包含所有驱动程序实现的单一驱动程序库的方法来放宽此限制。)
可以在源码树中的 cpp_static_test.sh 和 c/integration/static_test 中找到相关示例。