Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[C++] Building GCS and tests on M1 MacOS 12.05 is failing. #32487

Closed
asfimport opened this issue Jul 24, 2022 · 22 comments
Closed

[C++] Building GCS and tests on M1 MacOS 12.05 is failing. #32487

asfimport opened this issue Jul 24, 2022 · 22 comments
Assignees
Milestone

Comments

@asfimport
Copy link
Collaborator

Building GCS and tests on M1 MacOS 12.05 with dependencies installed with homebrew is failing.

cmake \
	-GNinja \
	-DCMAKE_INSTALL_PREFIX=$ARROW_HOME \
	-DCMAKE_INSTALL_LIBDIR=lib \
	-DARROW_PYTHON=ON \
	-DARROW_COMPUTE=ON \
	-DARROW_FILESYSTEM=ON \
	-DARROW_CSV=ON \
	-DARROW_GCS=ON \
	-DARROW_INSTALL_NAME_RPATH=OFF \
	-DARROW_BUILD_TESTS=ON \
	-DCMAKE_CXX_STANDARD=17 \
	..

Env:

PYARROW_WITH_PARQUET=1
PYARROW_WITH_DATASET=1
PYARROW_WITH_ORC=1
PYARROW_WITH_PARQUET_ENCRYPTION=1
PYARROW_WITH_PLASMA=1
PYARROW_WITH_GCS=1

Building errors with:


Undefined symbols for architecture arm64:
  "absl::lts_20220623::FormatTime(std::__1::basic_string_view<char, std::__1::char_traits<char> >, absl::lts_20220623::Time, absl::lts_20220623::TimeZone)", referenced from:
      arrow::fs::(anonymous namespace)::GcsIntegrationTest_OpenInputStreamReadMetadata_Test::TestBody() in gcsfs_test.cc.o
  "absl::lts_20220623::FromChrono(std::__1::chrono::time_point<std::__1::chrono::system_clock, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000000l> > > const&)", referenced from:
      arrow::fs::(anonymous namespace)::GcsIntegrationTest_OpenInputStreamReadMetadata_Test::TestBody() in gcsfs_test.cc.o
  "absl::lts_20220623::RFC3339_full", referenced from:
      arrow::fs::(anonymous namespace)::GcsFileSystem_ObjectMetadataRoundtrip_Test::TestBody() in gcsfs_test.cc.o
      arrow::fs::(anonymous namespace)::GcsIntegrationTest_OpenInputStreamReadMetadata_Test::TestBody() in gcsfs_test.cc.o
  "absl::lts_20220623::time_internal::cctz::utc_time_zone()", referenced from:
      arrow::fs::(anonymous namespace)::GcsIntegrationTest_OpenInputStreamReadMetadata_Test::TestBody() in gcsfs_test.cc.o
  "absl::lts_20220623::ToDoubleSeconds(absl::lts_20220623::Duration)", referenced from:
      arrow::fs::(anonymous namespace)::GcsFileSystem_ObjectMetadataRoundtrip_Test::TestBody() in gcsfs_test.cc.o
  "absl::lts_20220623::Duration::operator-=(absl::lts_20220623::Duration)", referenced from:
      arrow::fs::(anonymous namespace)::GcsFileSystem_ObjectMetadataRoundtrip_Test::TestBody() in gcsfs_test.cc.o
  "absl::lts_20220623::ParseTime(std::__1::basic_string_view<char, std::__1::char_traits<char> >, std::__1::basic_string_view<char, std::__1::char_traits<char> >, absl::lts_20220623::Time*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*)", referenced from:
      arrow::fs::(anonymous namespace)::GcsFileSystem_ObjectMetadataRoundtrip_Test::TestBody() in gcsfs_test.cc.o

Dependencies installed with:


brew update && brew bundle --file=cpp/Brewfile

See #13681 (comment) and #13407

Reporter: Rok Mihevc / @rok
Assignee: Kouhei Sutou / @kou
Watchers: Rok Mihevc / @rok

PRs and other links:

Note: This issue was originally created as ARROW-17193. Please see the migration documentation for further details.

@asfimport
Copy link
Collaborator Author

Kouhei Sutou / @kou:
It seems that Abseil is built without std::string_view but GCS uses std::string_view.

Could you show $(brew --prefix abseil)/include/absl/base/options.h?

@asfimport
Copy link
Collaborator Author

Rok Mihevc / @rok:


/opt/homebrew/opt/abseil/include/absl/base/options.h
// Copyright 2019 The Abseil Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// -----------------------------------------------------------------------------
// File: options.h
// -----------------------------------------------------------------------------
//
// This file contains Abseil configuration options for setting specific
// implementations instead of letting Abseil determine which implementation to
// use at compile-time. Setting these options may be useful for package or build
// managers who wish to guarantee ABI stability within binary builds (which are
// otherwise difficult to enforce).
//
// *** IMPORTANT NOTICE FOR PACKAGE MANAGERS:  It is important that
// maintainers of package managers who wish to package Abseil read and
// understand this file! ***
//
// Abseil contains a number of possible configuration endpoints, based on
// parameters such as the detected platform, language version, or command-line
// flags used to invoke the underlying binary. As is the case with all
// libraries, binaries which contain Abseil code must ensure that separate
// packages use the same compiled copy of Abseil to avoid a diamond dependency
// problem, which can occur if two packages built with different Abseil
// configuration settings are linked together. Diamond dependency problems in
// C++ may manifest as violations to the One Definition Rule (ODR) (resulting in
// linker errors), or undefined behavior (resulting in crashes).
//
// Diamond dependency problems can be avoided if all packages utilize the same
// exact version of Abseil. Building from source code with the same compilation
// parameters is the easiest way to avoid such dependency problems. However, for
// package managers who cannot control such compilation parameters, we are
// providing the file to allow you to inject ABI (Application Binary Interface)
// stability across builds. Settings options in this file will neither change
// API nor ABI, providing a stable copy of Abseil between packages.
//
// Care must be taken to keep options within these configurations isolated
// from any other dynamic settings, such as command-line flags which could alter
// these options. This file is provided specifically to help build and package
// managers provide a stable copy of Abseil within their libraries and binaries;
// other developers should not have need to alter the contents of this file.
//
// -----------------------------------------------------------------------------
// Usage
// -----------------------------------------------------------------------------
//
// For any particular package release, set the appropriate definitions within
// this file to whatever value makes the most sense for your package(s). Note
// that, by default, most of these options, at the moment, affect the
// implementation of types; future options may affect other implementation
// details.
//
// NOTE: the defaults within this file all assume that Abseil can select the
// proper Abseil implementation at compile-time, which will not be sufficient
// to guarantee ABI stability to package managers.

#ifndef ABSL_BASE_OPTIONS_H_
#define ABSL_BASE_OPTIONS_H_

// Include a standard library header to allow configuration based on the
// standard library in use.
#ifdef __cplusplus
#include <ciso646>
#endif

// -----------------------------------------------------------------------------
// Type Compatibility Options
// -----------------------------------------------------------------------------
//
// ABSL_OPTION_USE_STD_ANY
//
// This option controls whether absl::any is implemented as an alias to
// std::any, or as an independent implementation.
//
// A value of 0 means to use Abseil's implementation.  This requires only C++11
// support, and is expected to work on every toolchain we support.
//
// A value of 1 means to use an alias to std::any.  This requires that all code
// using Abseil is built in C++17 mode or later.
//
// A value of 2 means to detect the C++ version being used to compile Abseil,
// and use an alias only if a working std::any is available.  This option is
// useful when you are building your entire program, including all of its
// dependencies, from source.  It should not be used otherwise -- for example,
// if you are distributing Abseil in a binary package manager -- since in
// mode 2, absl::any will name a different type, with a different mangled name
// and binary layout, depending on the compiler flags passed by the end user.
// For more info, see https://abseil.io/about/design/dropin-types.
//
// User code should not inspect this macro.  To check in the preprocessor if
// absl::any is a typedef of std::any, use the feature macro ABSL_USES_STD_ANY.

#define ABSL_OPTION_USE_STD_ANY 2


// ABSL_OPTION_USE_STD_OPTIONAL
//
// This option controls whether absl::optional is implemented as an alias to
// std::optional, or as an independent implementation.
//
// A value of 0 means to use Abseil's implementation.  This requires only C++11
// support, and is expected to work on every toolchain we support.
//
// A value of 1 means to use an alias to std::optional.  This requires that all
// code using Abseil is built in C++17 mode or later.
//
// A value of 2 means to detect the C++ version being used to compile Abseil,
// and use an alias only if a working std::optional is available.  This option
// is useful when you are building your program from source.  It should not be
// used otherwise -- for example, if you are distributing Abseil in a binary
// package manager -- since in mode 2, absl::optional will name a different
// type, with a different mangled name and binary layout, depending on the
// compiler flags passed by the end user.  For more info, see
// https://abseil.io/about/design/dropin-types.

// User code should not inspect this macro.  To check in the preprocessor if
// absl::optional is a typedef of std::optional, use the feature macro
// ABSL_USES_STD_OPTIONAL.

#define ABSL_OPTION_USE_STD_OPTIONAL 2


// ABSL_OPTION_USE_STD_STRING_VIEW
//
// This option controls whether absl::string_view is implemented as an alias to
// std::string_view, or as an independent implementation.
//
// A value of 0 means to use Abseil's implementation.  This requires only C++11
// support, and is expected to work on every toolchain we support.
//
// A value of 1 means to use an alias to std::string_view.  This requires that
// all code using Abseil is built in C++17 mode or later.
//
// A value of 2 means to detect the C++ version being used to compile Abseil,
// and use an alias only if a working std::string_view is available.  This
// option is useful when you are building your program from source.  It should
// not be used otherwise -- for example, if you are distributing Abseil in a
// binary package manager -- since in mode 2, absl::string_view will name a
// different type, with a different mangled name and binary layout, depending on
// the compiler flags passed by the end user.  For more info, see
// https://abseil.io/about/design/dropin-types.
//
// User code should not inspect this macro.  To check in the preprocessor if
// absl::string_view is a typedef of std::string_view, use the feature macro
// ABSL_USES_STD_STRING_VIEW.

#define ABSL_OPTION_USE_STD_STRING_VIEW 2

// ABSL_OPTION_USE_STD_VARIANT
//
// This option controls whether absl::variant is implemented as an alias to
// std::variant, or as an independent implementation.
//
// A value of 0 means to use Abseil's implementation.  This requires only C++11
// support, and is expected to work on every toolchain we support.
//
// A value of 1 means to use an alias to std::variant.  This requires that all
// code using Abseil is built in C++17 mode or later.
//
// A value of 2 means to detect the C++ version being used to compile Abseil,
// and use an alias only if a working std::variant is available.  This option
// is useful when you are building your program from source.  It should not be
// used otherwise -- for example, if you are distributing Abseil in a binary
// package manager -- since in mode 2, absl::variant will name a different
// type, with a different mangled name and binary layout, depending on the
// compiler flags passed by the end user.  For more info, see
// https://abseil.io/about/design/dropin-types.
//
// User code should not inspect this macro.  To check in the preprocessor if
// absl::variant is a typedef of std::variant, use the feature macro
// ABSL_USES_STD_VARIANT.

#define ABSL_OPTION_USE_STD_VARIANT 2


// ABSL_OPTION_USE_INLINE_NAMESPACE
// ABSL_OPTION_INLINE_NAMESPACE_NAME
//
// These options controls whether all entities in the absl namespace are
// contained within an inner inline namespace.  This does not affect the
// user-visible API of Abseil, but it changes the mangled names of all symbols.
//
// This can be useful as a version tag if you are distributing Abseil in
// precompiled form.  This will prevent a binary library build of Abseil with
// one inline namespace being used with headers configured with a different
// inline namespace name.  Binary packagers are reminded that Abseil does not
// guarantee any ABI stability in Abseil, so any update of Abseil or
// configuration change in such a binary package should be combined with a
// new, unique value for the inline namespace name.
//
// A value of 0 means not to use inline namespaces.
//
// A value of 1 means to use an inline namespace with the given name inside
// namespace absl.  If this is set, ABSL_OPTION_INLINE_NAMESPACE_NAME must also
// be changed to a new, unique identifier name.  In particular "head" is not
// allowed.

#define ABSL_OPTION_USE_INLINE_NAMESPACE 1
#define ABSL_OPTION_INLINE_NAMESPACE_NAME lts_20220623

// ABSL_OPTION_HARDENED
//
// This option enables a "hardened" build in release mode (in this context,
// release mode is defined as a build where the `NDEBUG` macro is defined).
//
// A value of 0 means that "hardened" mode is not enabled.
//
// A value of 1 means that "hardened" mode is enabled.
//
// Hardened builds have additional security checks enabled when `NDEBUG` is
// defined. Defining `NDEBUG` is normally used to turn `assert()` macro into a
// no-op, as well as disabling other bespoke program consistency checks. By
// defining ABSL_OPTION_HARDENED to 1, a select set of checks remain enabled in
// release mode. These checks guard against programming errors that may lead to
// security vulnerabilities. In release mode, when one of these programming
// errors is encountered, the program will immediately abort, possibly without
// any attempt at logging.
//
// The checks enabled by this option are not free; they do incur runtime cost.
//
// The checks enabled by this option are always active when `NDEBUG` is not
// defined, even in the case when ABSL_OPTION_HARDENED is defined to 0. The
// checks enabled by this option may abort the program in a different way and
// log additional information when `NDEBUG` is not defined.

#define ABSL_OPTION_HARDENED 0

#endif  // ABSL_BASE_OPTIONS_H_

@asfimport
Copy link
Collaborator Author

Kouhei Sutou / @kou:
Thanks.

Here is the important part:

// A value of 2 means to detect the C++ version being used to compile Abseil,
// and use an alias only if a working std::string_view is available.  This
// option is useful when you are building your program from source.  It should
// not be used otherwise -- for example, if you are distributing Abseil in a
// binary package manager -- since in mode 2, absl::string_view will name a
// different type, with a different mangled name and binary layout, depending on
// the compiler flags passed by the end user.  For more info, see
// https://abseil.io/about/design/dropin-types.

#define ABSL_OPTION_USE_STD_STRING_VIEW 2

Could you also show strings $(brew --prefix abseil)/lib/libabsl_time.a | c++filt | grep FormatTime?

@asfimport
Copy link
Collaborator Author

Rok Mihevc / @rok:
Thanks for looking into this Kou!

I just have dynamic libs:


/opt/homebrew/opt/abseil/lib/libabsl_time.dylib
/opt/homebrew/opt/abseil/lib/libabsl_time.2206.0.0.dylib

I'm not sure if I can get static with brew.

@asfimport
Copy link
Collaborator Author

Kouhei Sutou / @kou:
OK. Then could you show {{{}strings $(brew --prefix abseil)/lib/libabsl_time.dylib | c++filt | grep FormatTime{}?}}

@asfimport
Copy link
Collaborator Author

Rok Mihevc / @rok:


strings $(brew --prefix abseil)/lib/libabsl_time.dylib | c++filt | grep FormatTime

Doesn't return anything. Filesize of libabsl_time.dylib is 106K.

@asfimport
Copy link
Collaborator Author

Rok Mihevc / @rok:
Just:


strings $(brew --prefix abseil)/lib/libabsl_time.dylib

Returns:


-%m-%d%ET%H:%M:%S
-%m-%d%ET%H:%M
-%m-%d%ET%H
-%m-%d
-2562047788015215h30m8s
%Y-%m-%d%ET%H:%M:%E*S%Ez
%Y-%m-%d%ET%H:%M:%S%Ez
%a, %d %b %E4Y %H:%M:%S %z
%d %b %E4Y %H:%M:%S %z
infinite-future
infinite-past
vH7Br

@asfimport
Copy link
Collaborator Author

Kouhei Sutou / @kou:
Oh... Could you try the following?


for x in $(brew --prefix abseil)/lib/libabsl*.dylib; do
 strings $x | c++filt G FormatTime && echo $x;
done

@asfimport
Copy link
Collaborator Author

Rok Mihevc / @rok:
Sure: 


G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_bad_any_cast_impl.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_bad_any_cast_impl.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_bad_optional_access.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_bad_optional_access.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_bad_variant_access.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_bad_variant_access.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_base.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_base.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_city.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_city.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_civil_time.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_civil_time.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_cord.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_cord.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_cord_internal.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_cord_internal.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_cordz_functions.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_cordz_functions.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_cordz_handle.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_cordz_handle.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_cordz_info.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_cordz_info.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_cordz_sample_token.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_cordz_sample_token.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_debugging_internal.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_debugging_internal.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_demangle_internal.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_demangle_internal.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_examine_stack.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_examine_stack.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_exponential_biased.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_exponential_biased.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_failure_signal_handler.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_failure_signal_handler.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_flags.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_flags.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_flags_commandlineflag.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_flags_commandlineflag.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_flags_commandlineflag_internal.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_flags_commandlineflag_internal.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_flags_config.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_flags_config.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_flags_internal.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_flags_internal.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_flags_marshalling.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_flags_marshalling.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_flags_parse.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_flags_parse.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_flags_private_handle_accessor.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_flags_private_handle_accessor.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_flags_program_name.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_flags_program_name.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_flags_reflection.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_flags_reflection.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_flags_usage.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_flags_usage.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_flags_usage_internal.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_flags_usage_internal.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_graphcycles_internal.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_graphcycles_internal.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_hash.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_hash.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_hashtablez_sampler.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_hashtablez_sampler.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_int128.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_int128.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_leak_check.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_leak_check.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_log_severity.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_log_severity.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_low_level_hash.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_low_level_hash.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_malloc_internal.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_malloc_internal.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_periodic_sampler.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_periodic_sampler.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_random_distributions.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_random_distributions.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_random_internal_distribution_test_util.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_random_internal_distribution_test_util.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_random_internal_platform.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_random_internal_platform.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_random_internal_pool_urbg.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_random_internal_pool_urbg.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_random_internal_randen.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_random_internal_randen.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_random_internal_randen_hwaes.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_random_internal_randen_hwaes.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_random_internal_randen_hwaes_impl.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_random_internal_randen_hwaes_impl.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_random_internal_randen_slow.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_random_internal_randen_slow.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_random_internal_seed_material.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_random_internal_seed_material.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_random_seed_gen_exception.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_random_seed_gen_exception.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_random_seed_sequences.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_random_seed_sequences.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_raw_hash_set.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_raw_hash_set.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_raw_logging_internal.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_raw_logging_internal.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_scoped_set_env.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_scoped_set_env.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_spinlock_wait.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_spinlock_wait.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_stacktrace.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_stacktrace.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_status.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_status.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_statusor.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_statusor.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_str_format_internal.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_str_format_internal.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_strerror.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_strerror.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_strings.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_strings.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_strings_internal.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_strings_internal.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_symbolize.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_symbolize.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_synchronization.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_synchronization.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_throw_delegate.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_throw_delegate.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_time.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_time.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_time_zone.2206.0.0.dylib
G
FormatTime
/opt/homebrew/opt/abseil/lib/libabsl_time_zone.dylib

 

 

@asfimport
Copy link
Collaborator Author

Kouhei Sutou / @kou:
Ah, sorry. "G" is my local alias... Please use "| grep" instead of "G":


for x in $(brew --prefix abseil)/lib/libabsl*.dylib; do
 strings $x | c++filt | grep FormatTime && echo $x;
done

@asfimport
Copy link
Collaborator Author

Rok Mihevc / @rok:
Ah, that makes sense :)
That returns nothing.

@asfimport
Copy link
Collaborator Author

Kouhei Sutou / @kou:
OK. I'll try this this week or the next week because I'll get a M1 mac soon.

@asfimport
Copy link
Collaborator Author

Rok Mihevc / @rok:
Great! If I have time I'll try to move this too and will report here.

@asfimport
Copy link
Collaborator Author

Kouhei Sutou / @kou:
I found that this is caused by mixing system Abseil (installed by Homebrew) and bundled Abseil.

@asfimport
Copy link
Collaborator Author

Rok Mihevc / @rok:
Oh, that makes sense.

@asfimport
Copy link
Collaborator Author

Ian Cook / @ianmcook:
@kou @rok  do you think we could get the patch for this included in the next 9.0.0 release candidate (assuming there will be another release candidate)?

@asfimport
Copy link
Collaborator Author

Rok Mihevc / @rok:
I think Krisz is probably open to it if we have a fix.
@kou please let me know if I can help testing or otherwise!

@asfimport
Copy link
Collaborator Author

Kouhei Sutou / @kou:
This is ready but I'm not sure whether we should cherry-pick this to 9.0.0 or not. (I don't opposite it.)
Generally, users don't use ARROW_BUILD_TESTS=ON. I think that this isn't occurred without ARROW_BUILD_TESTS=ON.

@asfimport
Copy link
Collaborator Author

Rok Mihevc / @rok:
With this change I'm able to build locally on M1. I think it'd be nice if this would be included as it's not possible to build locally otherwise. With ARROW_BUILD_TESTS=OFF you still can't build a working python library, see Krisz' comment on Zulip.

@asfimport
Copy link
Collaborator Author

Kouhei Sutou / @kou:
The error message


ImportError: dlopen(/Users/kszucs/Workspace/arrow/python/pyarrow/lib.cpython-39-darwin.so, 0x0002): symbol not found in flat namespace '__ZN4absl12lts_2021110210FormatTimeENS0_11string_viewENS0_4TimeENS0_8TimeZoneE'

may not be related to this.

This may be able to fix by specifying -DCMAKE_CXX_STANDARD=17. (If used Abseil is built with C+17 and Arrow is built with C+11, this may be caused.)

@asfimport
Copy link
Collaborator Author

Kae Suarez / @ksuarez1423:
I can confirm that when turning on C++17, I stop having the error you show there, @kou. Also, this happens even with Abseil not in my homebrew, but in my Conda.

@asfimport
Copy link
Collaborator Author

Kouhei Sutou / @kou:
Issue resolved by pull request 13731
#13731

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants