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




Reply via email to