A new high-performance file system we are working with returns an error while
writing a .parquet file. The following arrow symbol does not resolve properly
and the error is masked.
libparquet.so: undefined symbol: _ZNK5arrow6Status8ToStringB5cxx11Ev
> nm libarrow.so* | grep -i ZNK5arrow6Status8ToStringB5cxx11Ev
00000000002b7760 t _ZNK5arrow6Status8ToStringB5cxx11Ev
00000000002b7760 t _ZNK5arrow6Status8ToStringB5cxx11Ev
One of our Linux dev/build experts tracked this down to an issue in arrow open
source. He says the lowercase ‘t’ (text) code (… 7760 t _ZNK …) in the nm
command output is incorrect and it should instead be an uppercase ‘T’.
He traced the problem to this file:
../cpp/src/arrow/symbols.map
Here’s an update with his fix. Lines 27-30 are new. Nothing else changes.
1 # Licensed to the Apache Software Foundation (ASF) under one
2 # or more contributor license agreements. See the NOTICE file
3 # distributed with this work for additional information
4 # regarding copyright ownership. The ASF licenses this file
5 # to you under the Apache License, Version 2.0 (the
6 # "License"); you may not use this file except in compliance
7 # with the License. You may obtain a copy of the License at
8 #
9 # http://www.apache.org/licenses/LICENSE-2.0
10 #
11 # Unless required by applicable law or agreed to in writing,
12 # software distributed under the License is distributed on an
13 # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14 # KIND, either express or implied. See the License for the
15 # specific language governing permissions and limitations
16 # under the License.
17
18 {
19 global:
20 extern "C++" {
21 # The leading asterisk is required for symbols such as
22 # "typeinfo for arrow::SomeClass".
23 # Unfortunately this will also catch template specializations
24 # (from e.g. STL or Flatbuffers) involving Arrow types.
25 *arrow::*;
26 *arrow_vendored::*;
27 *ToString*;
28 *key*;
29 *str*;
30 *value*;
31 };
32 # Also export C-level helpers
33 arrow_*;
34 pyarrow_*;
35
36 # Symbols marked as 'local' are not exported by the DSO and thus may not
37 # be used by client applications. Everything except the above falls here.
38 # This ensures we hide symbols of static dependencies.
39 local:
40 *;
41
42 };
We have made these changes in our local clones the arrow open source
repositories. I’m passing this along for the community’s review. Reply with
a link and I’ll enter a jira ticket if needed.
-Brian