Robert Nishihara created ARROW-1368:
---------------------------------------

             Summary: libarrow.a is not linked against boost libraries when 
compiled with -DARROW_BOOST_USE_SHARED=off
                 Key: ARROW-1368
                 URL: https://issues.apache.org/jira/browse/ARROW-1368
             Project: Apache Arrow
          Issue Type: Bug
          Components: C++
         Environment: Ubuntu 16.04
            Reporter: Robert Nishihara


When I build arrow with {{-DARROW_BOOST_USE_SHARED=off}} and then inspect 
{{libarrow.a}} with {{nm -g libarrow.a}}, some boost symbols are undefined.

The problem can be reproduced on Ubuntu 16.04 as follows.

First compile boost with -fPIC.

{{code}}
cd ~
wget --no-check-certificate 
http://downloads.sourceforge.net/project/boost/boost/1.60.0/boost_1_60_0.tar.gz 
-O ~/boost_1_60_0.tar.gz
tar xf boost_1_60_0.tar.gz
cd boost_1_60_0/
./bootstrap.sh
./bjam cxxflags=-fPIC cflags=-fPIC --prefix=../boost --with-filesystem 
--with-date_time --with-system --with-regex install
cd ..
{{code}}

Then compile Arrow.

{{code}}
cd ~
git clone https://github.com/apache/arrow
mkdir -p ~/arrow/cpp/build
cd ~/arrow/cpp/build
BOOST_ROOT=~/boost \
cmake -DCMAKE_BUILD_TYPE=Release \
      -DCMAKE_C_FLAGS="-g -O3" \
      -DCMAKE_CXX_FLAGS="-g -O3" \
      -DARROW_BUILD_TESTS=off \
      -DARROW_HDFS=on \
      -DARROW_BOOST_USE_SHARED=off \
      -DARROW_PYTHON=on \
      -DARROW_PLASMA=on \
      -DPLASMA_PYTHON=on \
      -DARROW_JEMALLOC=off \
      -DARROW_WITH_BROTLI=off \
      -DARROW_WITH_LZ4=off \
      -DARROW_WITH_SNAPPY=off \
      -DARROW_WITH_ZLIB=off \
      -DARROW_WITH_ZSTD=off \
      ..

make VERBOSE=1 -j8
{{code}}

The cmake command finds the recently compiled boost and prints the following.

{{code}}
-- [ /usr/share/cmake-3.5/Modules/FindBoost.cmake:1516 ] Boost_FOUND = 1
-- Boost version: 1.60.0
-- Found the following Boost libraries:
--   system
--   filesystem
-- Boost include dir: /home/ubuntu/boost/include
-- Boost libraries: 
/home/ubuntu/boost/lib/libboost_system.a/home/ubuntu/boost/lib/libboost_filesystem.a
Added static library dependency boost_system: 
/home/ubuntu/boost/lib/libboost_system.a
Added static library dependency boost_filesystem: 
/home/ubuntu/boost/lib/libboost_filesystem.a
{{code}}

Compilation does not appear to link {{libarrow.a}} against the boost libraries 
(though {{libarrow.so}} is handled properly).

For {{libarrow.a}} (not linked against boost)

{{code}}
/usr/bin/ar qc release/libarrow.a  
CMakeFiles/arrow_objlib.dir/src/arrow/array.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/buffer.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/builder.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/compare.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/memory_pool.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/pretty_print.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/status.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/table.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/tensor.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/type.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/visitor.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/io/file.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/io/interfaces.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/io/memory.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/util/bit-util.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/util/compression.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/util/cpu-info.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/util/decimal.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/util/key_value_metadata.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/io/hdfs.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/io/hdfs-internal.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/ipc/feather.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/ipc/json.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/ipc/json-internal.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/ipc/metadata.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/ipc/reader.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/ipc/writer.cc.o
{{code}}

For {{libarrow.so}} (linked against boost)

{{code}}
/usr/bin/c++  -fPIC -g -O3 -O3 -DNDEBUG -Wall -std=c++11 -msse3  -O3 -DNDEBUG 
-Wl,--version-script=/home/ubuntu/arrow/cpp/src/arrow/symbols.map -shared 
-Wl,-soname,libarrow.so.0 -o release/libarrow.so.0.0.0 
CMakeFiles/arrow_objlib.dir/src/arrow/array.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/buffer.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/builder.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/compare.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/memory_pool.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/pretty_print.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/status.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/table.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/tensor.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/type.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/visitor.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/io/file.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/io/interfaces.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/io/memory.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/util/bit-util.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/util/compression.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/util/cpu-info.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/util/decimal.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/util/key_value_metadata.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/io/hdfs.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/io/hdfs-internal.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/ipc/feather.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/ipc/json.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/ipc/json-internal.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/ipc/metadata.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/ipc/reader.cc.o 
CMakeFiles/arrow_objlib.dir/src/arrow/ipc/writer.cc.o -ldl -lpthread 
/home/ubuntu/boost/lib/libboost_system.a 
/home/ubuntu/boost/lib/libboost_filesystem.a 
{{code}}

Then {{nm -g release/libarrow.a}} contains the following line (for example).

{{code}}
                 U _ZN5boost6system15system_categoryEv
{{code}}

The file {{arrow/cpp/CMakeLists.txt}} contains the block

{{code}}
ADD_ARROW_LIB(arrow
  SOURCES ${ARROW_ALL_SRCS}
  DEPENDENCIES arrow_dependencies
  SHARED_LINK_FLAGS ${ARROW_SHARED_LINK_FLAGS}
  SHARED_LINK_LIBS ${ARROW_LINK_LIBS}
  SHARED_PRIVATE_LINK_LIBS ${ARROW_SHARED_PRIVATE_LINK_LIBS}
  STATIC_LINK_LIBS ${ARROW_STATIC_LINK_LIBS}
  STATIC_PRIVATE_LINK_LIBS ${ARROW_STATIC_PRIVATE_LINK_LIBS}
)
{{code}}

Printing {{ARROW_STATIC_PRIVATE_LINK_LIBS}} shows that the variable equals 
{{boost_system_static;boost_filesystem_static}}, which seems right.

Let me know if you have any thoughts about this.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to