apache / arrow-adbc

Database connectivity API standard and libraries for Apache Arrow
https://arrow.apache.org/adbc/
Apache License 2.0
373 stars 93 forks source link

c/driver/sqlite: Driver tests fail to link #1222

Closed paleolimbot closed 12 months ago

paleolimbot commented 12 months ago

I can't seem to build the tests for any driver anymore! On MacOS M1 I get:

cd arrow-adbc/c
mkdir build && cd build
cmake .. -DADBC_BUILD_TESTS=ON -DADBC_DRIVER_SQLITE=ON
cmake --build .
[build] [100%] Linking CXX executable adbc-driver-sqlite-test
[build] Undefined symbols for architecture arm64:
[build]   "testing::Matcher<std::__1::basic_string_view<char, std::__1::char_traits<char>> const&>::Matcher(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&)", referenced from:
[build]       testing::Matcher<std::__1::basic_string_view<char, std::__1::char_traits<char>> const&> testing::internal::MatcherCastImpl<std::__1::basic_string_view<char, std::__1::char_traits<char>> const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>>::CastImpl<true>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::integral_constant<bool, true>, std::__1::integral_constant<bool, true>) in adbc_validation.cc.o
[build] ld: symbol(s) not found for architecture arm64

I do see that adbc_validation is referenced from the cmake but I'm not familiar with the custom CMake levels of indirection to know if there's a file missing. The complete output is:

``` deweydunnington@Deweys-MacBook-Air-2 c % mkdir build && cd build deweydunnington@Deweys-MacBook-Air-2 build % cmake .. -DADBC_BUILD_TESTS=ON -DADBC_DRIVER_SQLITE=ON -- The C compiler identification is AppleClang 14.0.3.14030022 -- The CXX compiler identification is AppleClang 14.0.3.14030022 -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working C compiler: /Library/Developer/CommandLineTools/usr/bin/cc - skipped -- Detecting C compile features -- Detecting C compile features - done -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Check for working CXX compiler: /Library/Developer/CommandLineTools/usr/bin/c++ - skipped -- Detecting CXX compile features -- Detecting CXX compile features - done -- Performing Test CXX_LINKER_SUPPORTS_VERSION_SCRIPT -- Performing Test CXX_LINKER_SUPPORTS_VERSION_SCRIPT - Failed -- Found GTest: /opt/homebrew/lib/cmake/GTest/GTestConfig.cmake (found version "1.12.1") -- Found SQLite3: /Library/Developer/CommandLineTools/SDKs/MacOSX13.3.sdk/usr/include (found version "3.39.5") -- Looking for sys/types.h -- Looking for sys/types.h - found -- Looking for stdint.h -- Looking for stdint.h - found -- Looking for stddef.h -- Looking for stddef.h - found -- Check size of time_t -- Check size of time_t - done -- --------------------------------------------------------------------- -- ADBC version: 0.8.0-SNAPSHOT -- -- Build configuration summary: -- CMake version: 3.24.1 -- Generator: Unix Makefiles -- Build type: -- Source directory: /Users/deweydunnington/Desktop/rscratch/arrow-adbc/c -- Install prefix: /usr/local -- -- Compile and link options: -- -- ADBC_BUILD_WARNING_LEVEL=CHECKIN [default=""] -- CHECKIN to enable Werror, PRODUCTION otherwise -- ADBC_CXXFLAGS="" [default=""] -- Compiler flags to append when compiling ADBC C++ libraries -- ADBC_GO_BUILD_TAGS="" [default=""] -- Build tags to append when compiling ADBC Go libraries -- ADBC_BUILD_STATIC=ON [default=ON] -- Build static libraries -- ADBC_BUILD_SHARED=ON [default=ON] -- Build shared libraries -- ADBC_PACKAGE_KIND="" [default=""] -- Arbitrary string that identifies the kind of package -- (for informational purposes) -- ADBC_GIT_ID=aafb99601825aaed054f0772f952cd14004a1c04 [default=""] -- The Arrow git commit id (if any) -- ADBC_GIT_DESCRIPTION="" [default=""] -- The Arrow git commit description (if any) -- ADBC_NO_DEPRECATED_API=OFF [default=OFF] -- Exclude deprecated APIs from build -- ADBC_USE_CCACHE=ON [default=ON] -- Use ccache when compiling (if available) -- ADBC_USE_PRECOMPILED_HEADERS=OFF [default=OFF] -- Use precompiled headers when compiling -- ADBC_ARMV8_ARCH=armv8-a [default=armv8-a|armv8-a+crc+crypto] -- Arm64 arch and extensions -- ADBC_ALTIVEC=ON [default=ON] -- Build with Altivec if compiler has support -- ADBC_RPATH_ORIGIN=OFF [default=OFF] -- Build Arrow libraries with RATH set to $ORIGIN -- ADBC_INSTALL_NAME_RPATH=ON [default=ON] -- Build Arrow libraries with install_name set to @rpath -- ADBC_GGDB_DEBUG=ON [default=ON] -- Pass -ggdb flag to debug builds -- -- Test and benchmark options: -- -- ADBC_BUILD_EXAMPLES=OFF [default=OFF] -- Build the Arrow examples -- ADBC_BUILD_TESTS=ON [default=OFF] -- Build the Arrow googletest unit tests -- ADBC_BUILD_INTEGRATION=OFF [default=OFF] -- Build the Arrow integration test executables -- ADBC_BUILD_BENCHMARKS=OFF [default=OFF] -- Build the Arrow micro benchmarks -- ADBC_TEST_LINKAGE=shared [default=shared|static] -- Linkage of Arrow libraries with unit tests executables. -- -- Lint options: -- -- ADBC_GENERATE_COVERAGE=OFF [default=OFF] -- Build with C++ code coverage enabled -- -- Checks options: -- -- ADBC_TEST_MEMCHECK=OFF [default=OFF] -- Run the test suite using valgrind --tool=memcheck -- ADBC_USE_ASAN=OFF [default=OFF] -- Enable Address Sanitizer checks -- ADBC_USE_TSAN=OFF [default=OFF] -- Enable Thread Sanitizer checks -- ADBC_USE_UBSAN=OFF [default=OFF] -- Enable Undefined Behavior sanitizer checks -- -- Thirdparty toolchain options: -- -- ADBC_DEPENDENCY_SOURCE=AUTO [default=AUTO|BUNDLED|SYSTEM|CONDA|VCPKG|BREW] -- Method to use for acquiring arrow's build dependencies -- -- Advanced developer options: -- -- -- Project components options: -- -- ADBC_DRIVER_FLIGHTSQL=OFF [default=OFF] -- Build the Flight SQL driver -- ADBC_DRIVER_MANAGER=OFF [default=OFF] -- Build the driver manager -- ADBC_DRIVER_POSTGRESQL=OFF [default=OFF] -- Build the PostgreSQL driver -- ADBC_DRIVER_SQLITE=ON [default=OFF] -- Build the SQLite driver -- ADBC_DRIVER_SNOWFLAKE=OFF [default=OFF] -- Build the Snowflake driver -- ADBC_INTEGRATION_DUCKDB=OFF [default=OFF] -- Build the test suite for DuckDB -- Configuring done -- Generating done -- Build files have been written to: /Users/deweydunnington/Desktop/rscratch/arrow-adbc/c/build deweydunnington@Deweys-MacBook-Air-2 build % cmake --build . [ 6%] Building C object vendor/nanoarrow/CMakeFiles/nanoarrow.dir/nanoarrow.c.o [ 13%] Linking C static library libnanoarrow.a [ 13%] Built target nanoarrow [ 20%] Building C object driver/common/CMakeFiles/adbc_driver_common.dir/utils.c.o [ 26%] Linking C static library libadbc_driver_common.a [ 26%] Built target adbc_driver_common [ 33%] Building CXX object driver/common/CMakeFiles/adbc-driver-common-test.dir/utils_test.cc.o [ 40%] Linking CXX executable adbc-driver-common-test [ 40%] Built target adbc-driver-common-test [ 46%] Building CXX object validation/CMakeFiles/adbc_validation_util.dir/adbc_validation_util.cc.o [ 53%] Linking CXX static library libadbc_validation_util.a [ 53%] Built target adbc_validation_util [ 60%] Building CXX object validation/CMakeFiles/adbc_validation.dir/adbc_validation.cc.o [ 60%] Built target adbc_validation [ 66%] Building C object driver/sqlite/CMakeFiles/adbc_driver_sqlite_objlib.dir/sqlite.c.o [ 73%] Building C object driver/sqlite/CMakeFiles/adbc_driver_sqlite_objlib.dir/statement_reader.c.o [ 73%] Built target adbc_driver_sqlite_objlib [ 80%] Linking C shared library libadbc_driver_sqlite.dylib [ 80%] Built target adbc_driver_sqlite_shared [ 86%] Linking C static library libadbc_driver_sqlite.a [ 86%] Built target adbc_driver_sqlite_static [ 93%] Building CXX object driver/sqlite/CMakeFiles/adbc-driver-sqlite-test.dir/sqlite_test.cc.o [100%] Linking CXX executable adbc-driver-sqlite-test Undefined symbols for architecture arm64: "testing::Matcher> const&>::Matcher(std::__1::basic_string, std::__1::allocator> const&)", referenced from: testing::Matcher> const&> testing::internal::MatcherCastImpl> const&, std::__1::basic_string, std::__1::allocator>>::CastImpl(std::__1::basic_string, std::__1::allocator> const&, std::__1::integral_constant, std::__1::integral_constant) in adbc_validation.cc.o ld: symbol(s) not found for architecture arm64 clang: error: linker command failed with exit code 1 (use -v to see invocation) make[2]: *** [driver/sqlite/adbc-driver-sqlite-test] Error 1 make[1]: *** [driver/sqlite/CMakeFiles/adbc-driver-sqlite-test.dir/all] Error 2 make: *** [all] Error 2 ```
paleolimbot commented 12 months ago

Commeting out find_package(GTest) (i.e., forcing a build from source) and brew install googletest to upgrade seems to do it đŸ¤·