From 44ffc331e5999cfdb17a08773d5d151ad17f6612 Mon Sep 17 00:00:00 2001 From: "Uwe L. Korn" Date: Wed, 6 Dec 2017 20:50:28 +0100 Subject: [PATCH] ARROW-1171: Statically link libstdc++, use -BSymbolic Change-Id: I7a5f3ceb8c62239928f9b0bf013a9d9703b4577c --- cpp/src/arrow/symbols.map | 15 +++++++++++++++ python/CMakeLists.txt | 5 +++++ python/manylinux1/Dockerfile-x86_64 | 6 ++++-- python/manylinux1/build_arrow.sh | 5 ++++- .../manylinux1/scripts/check_arrow_visibility.sh | 3 +++ python/setup.py | 2 +- 6 files changed, 32 insertions(+), 4 deletions(-) diff --git a/cpp/src/arrow/symbols.map b/cpp/src/arrow/symbols.map index f216d865001..44e84c66827 100644 --- a/cpp/src/arrow/symbols.map +++ b/cpp/src/arrow/symbols.map @@ -62,9 +62,24 @@ # a system with an older libstdc++ which doesn't include the necessary # c++11 symbols. std::*; + __cxxabiv1::*; + __gnu_cxx::*; # Statically linked C++ dependencies boost::*; snappy::*; }; + + # Things that are C++ but are not matched by above filters + __dynamic_cast; + execute_native_thread_routine; + __gcclibcxx_demangle_callback; + __gxx_personality_v0; + # operator new/delete + _ZdaPv; + _ZdlPv; + _Znam; + _Znwm; + _ZSt14__convert*; + _ZSt21__copy*; }; diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index cbbb464d05a..17f0cdbf820 100644 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -401,5 +401,10 @@ foreach(module ${CYTHON_EXTENSIONS}) INSTALL_RPATH ${module_install_rpath}) endif() + if (NOT APPLE AND NOT MSVC) + set_target_properties(${module_name} PROPERTIES + LINK_FLAGS "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/pyarrow/symbols.map") + endif() + target_link_libraries(${module_name} ${LINK_LIBS}) endforeach(module) diff --git a/python/manylinux1/Dockerfile-x86_64 b/python/manylinux1/Dockerfile-x86_64 index 919a32be715..4ac35ad2b80 100644 --- a/python/manylinux1/Dockerfile-x86_64 +++ b/python/manylinux1/Dockerfile-x86_64 @@ -16,11 +16,13 @@ # under the License. FROM quay.io/xhochy/arrow_manylinux1_x86_64_base:latest +RUN yum install -y gdb + ADD arrow /arrow WORKDIR /arrow/cpp RUN mkdir build-plain WORKDIR /arrow/cpp/build-plain -RUN cmake -GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/arrow-dist -DARROW_BUILD_TESTS=OFF -DARROW_BUILD_SHARED=ON -DARROW_BOOST_USE_SHARED=OFF -DARROW_JEMALLOC=ON -DARROW_RPATH_ORIGIN=ON -DARROW_JEMALLOC_USE_SHARED=OFF .. +RUN cmake -GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/arrow-dist -DARROW_BUILD_TESTS=OFF -DARROW_BUILD_SHARED=ON -DARROW_BOOST_USE_SHARED=OFF -DARROW_JEMALLOC=ON -DARROW_RPATH_ORIGIN=ON -DARROW_JEMALLOC_USE_SHARED=OFF -DCMAKE_CXX_FLAGS='-Wl,-Bsymbolic -static-libstdc++ -fno-omit-frame-pointer' .. RUN ninja install ADD scripts/check_arrow_visibility.sh / @@ -29,5 +31,5 @@ RUN /check_arrow_visibility.sh WORKDIR / RUN git clone https://github.com/apache/parquet-cpp.git WORKDIR /parquet-cpp -RUN ARROW_HOME=/arrow-dist cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/arrow-dist -DPARQUET_BUILD_TESTS=OFF -DPARQUET_BUILD_SHARED=OFF -DPARQUET_BUILD_STATIC=ON -DPARQUET_BOOST_USE_SHARED=OFF -GNinja . +RUN ARROW_HOME=/arrow-dist cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/arrow-dist -DPARQUET_BUILD_TESTS=OFF -DPARQUET_BUILD_SHARED=OFF -DPARQUET_BUILD_STATIC=ON -DPARQUET_BOOST_USE_SHARED=OFF -GNinja -DCMAKE_CXX_FLAGS='-Wl,-Bsymbolic -static-libstdc++' . RUN ninja install diff --git a/python/manylinux1/build_arrow.sh b/python/manylinux1/build_arrow.sh index ced4556e92a..82236a58e04 100755 --- a/python/manylinux1/build_arrow.sh +++ b/python/manylinux1/build_arrow.sh @@ -45,6 +45,7 @@ export PYARROW_WITH_PLASMA=1 export PYARROW_BUNDLE_ARROW_CPP=1 export PKG_CONFIG_PATH=/arrow-dist/lib64/pkgconfig export PYARROW_CMAKE_OPTIONS='-DTHRIFT_HOME=/usr' +export PYARROW_CXXFLAGS='-Wl,-Bsymbolic -static-libstdc++' # Ensure the target directory exists mkdir -p /io/dist @@ -81,7 +82,9 @@ for PYTHON in ${PYTHON_VERSIONS}; do source /venv-test-${PYTHON}/bin/activate pip install repaired_wheels/*.whl - py.test --parquet /venv-test-${PYTHON}/lib/*/site-packages/pyarrow -v + ulimit -c unlimited + py.test --parquet /venv-test-${PYTHON}/lib/*/site-packages/pyarrow -v || true + /bin/bash deactivate mv repaired_wheels/*.whl /io/dist diff --git a/python/manylinux1/scripts/check_arrow_visibility.sh b/python/manylinux1/scripts/check_arrow_visibility.sh index 27a30f7479b..f4d5ce120dd 100755 --- a/python/manylinux1/scripts/check_arrow_visibility.sh +++ b/python/manylinux1/scripts/check_arrow_visibility.sh @@ -23,4 +23,7 @@ then exit 0 fi +grep ' T ' nm_arrow.log | grep -v arrow +nm -D /arrow-dist/lib64/libarrow.so | grep ' T ' | grep -v arrow + exit 1 diff --git a/python/setup.py b/python/setup.py index 32e76ab05d8..729ec67cdbf 100644 --- a/python/setup.py +++ b/python/setup.py @@ -158,7 +158,7 @@ def _run_cmake(self): cmake_options.append('-DPYARROW_BUILD_PLASMA=on') if len(self.cmake_cxxflags) > 0: - cmake_options.append('-DPYARROW_CXXFLAGS="{0}"' + cmake_options.append('-DPYARROW_CXXFLAGS={0}' .format(self.cmake_cxxflags)) if self.bundle_arrow_cpp: