Skip to content

Installed CMake config missing platform link deps for Arrow bundled S3 libraries #9

Description

@smaheshwar-pltr

Problem

When ICEBERG_S3=ON with vendored Arrow (the default), arrow_bundled_dependencies contains AWS SDK C libraries (aws-c-common, aws-c-io, etc.) that depend on platform system libraries. The installed iceberg-config.cmake creates the Arrow::arrow_bundled_dependencies IMPORTED STATIC target but doesn't declare these transitive dependencies, causing unresolved symbol errors at link time.

Consumers using iceberg-cpp as a statically-linked library via find_package(iceberg CONFIG) with S3 support enabled hit linker failures on macOS (and likely Windows).

Error

On macOS (arm64), linking produces hundreds of undefined symbols from Apple's Network, Security, and CoreFoundation frameworks:

Undefined symbols for architecture arm64:
  "_CFRelease", referenced from:
      ... in libarrow_bundled_dependencies.a(...)
  "_CFRetain", referenced from:
      ... in libarrow_bundled_dependencies.a(...)
  "_nw_connection_cancel", referenced from:
      _s_socket_close_fn in libarrow_bundled_dependencies.a[289](nw_socket.c.o)
  "_nw_connection_create", referenced from:
      _s_socket_connect_fn in libarrow_bundled_dependencies.a[289](nw_socket.c.o)
  "_nw_connection_send", referenced from:
      _s_socket_write_fn in libarrow_bundled_dependencies.a[289](nw_socket.c.o)
  "_sec_identity_create", referenced from:
      _s_aws_secitem_get_identity in libarrow_bundled_dependencies.a[287](darwin_pki_utils.c.o)
  "_sec_protocol_options_set_min_tls_protocol_version", referenced from:
      _s_setup_tls_options in libarrow_bundled_dependencies.a[289](nw_socket.c.o)
  ... (30+ more _nw_*, _sec_*, _CF* symbols)
ld: symbol(s) not found for architecture arm64

Root cause

Arrow's own ArrowConfig.cmake.in handles this by checking "aws-c-common" IN_LIST ARROW_BUNDLED_STATIC_LIBS and adding find_library + target_link_libraries(INTERFACE) for the platform frameworks. iceberg-cpp's iceberg-config.cmake.in does not replicate this, so the transitive platform deps are lost.

Expected platform dependencies:

  • macOS: CoreFoundation, Security, Network, SystemConfiguration
  • Windows: winhttp, bcrypt, userenv, etc.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions