apache / arrow

Apache Arrow is a multi-language toolbox for accelerated data interchange and in-memory processing
https://arrow.apache.org/
Apache License 2.0
14.13k stars 3.44k forks source link

[C++] Test and benchmark libraries library search path subtly affected by installation #21677

Open asfimport opened 5 years ago

asfimport commented 5 years ago

Test and benchmark binaries should always favor the local non-installed libarrow and libarrow_testing.


$ cmake -GNinja -DARROW_BUILD_TESTS=ON .. && ninja
$ ldd release/arrow-array-test                                
        libarrow_testing.so.14 => /home/fsaintjacques/src/db/arrow/cpp/build/release/libarrow_testing.so.14 (0x00007f8f2b79e000)
        libarrow.so.14 => /home/fsaintjacques/src/db/arrow/cpp/build/release/libarrow.so.14 (0x00007f8f2b063000)

$ ninja install
$ rm -rf * && cmake -GNinja -DARROW_BUILD_TESTS=ON .. && ninja
$ ldd release/arrow-array-test 
        libarrow_testing.so.14 => /home/fsaintjacques/miniconda/envs/pyarrow-dev/lib/libarrow_testing.so.14 (0x00007f75d2bda000)
        libarrow.so.14 => /home/fsaintjacques/miniconda/envs/pyarrow-dev/lib/libarrow.so.14 (0x00007f75d249f000)
$ readelf -d release/arrow-array-test |grep RPATH
 0x000000000000000f (RPATH)              Library rpath: [/home/fsaintjacques/miniconda/envs/pyarrow-dev/lib:/home/fsaintjacques/src/db/arrow/cpp/build/release:/home/fsaintjacques/miniconda/envs/pyarrow-dev/lib]

# actual invocation
[1/1] : && /usr/bin/ccache /home/fsaintjacques/miniconda/envs/pyarrow-dev/bin/x86_64-conda_cos6-linux-gnu-c++  -Wno-noexcept-type -fvisibility-inlines-hidden -std=c++17 -fmessage-length=0 -march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -ffunction-sections -pipe -fdiagnostics-color=always -O3 -DNDEBUG  -Wall -msse4.2  -O3 -DNDEBUG  -Wl,-O2 -Wl,--sort-common -Wl,--as-needed -Wl,-z,relro -Wl,-z,now -Wl,--disable-new-dtags -Wl,--gc-sections   -rdynamic src/arrow/CMakeFiles/arrow-array-test.dir/array-test.cc.o src/arrow/CMakeFiles/arrow-array-test.dir/array-binary-test.cc.o src/arrow/CMakeFiles/arrow-array-test.dir/array-dict-test.cc.o src/arrow/CMakeFiles/arrow-array-test.dir/array-list-test.cc.o src/arrow/CMakeFiles/arrow-array-test.dir/array-struct-test.cc.o src/arrow/CMakeFiles/arrow-array-test.dir/array-union-test.cc.o  -o release/arrow-array-test  -Wl,-rpath,/home/fsaintjacques/src/db/arrow/cpp/build/release:/home/fsaintjacques/miniconda/envs/pyarrow-dev/lib release/libarrow_testing.so.14.0.0 release/libarrow.so.14.0.0 /home/fsaintjacques/miniconda/envs/pyarrow-dev/lib/libdouble-conversion.a /home/fsaintjacques/miniconda/envs/pyarrow-dev/lib/libbrotlienc.so /home/fsaintjacques/miniconda/envs/pyarrow-dev/lib/libbrotlidec.so /home/fsaintjacques/miniconda/envs/pyarrow-dev/lib/libbrotlicommon.so /home/fsaintjacques/miniconda/envs/pyarrow-dev/lib/libglog.so -ldl /home/fsaintjacques/miniconda/envs/pyarrow-dev/lib/libdouble-conversion.a /home/fsaintjacques/miniconda/envs/pyarrow-dev/lib/libboost_system.so /home/fsaintjacques/miniconda/envs/pyarrow-dev/lib/libboost_filesystem.so /home/fsaintjacques/miniconda/envs/pyarrow-dev/lib/libboost_regex.so /home/fsaintjacques/miniconda/envs/pyarrow-dev/lib/libgtest_main.so /home/fsaintjacques/miniconda/envs/pyarrow-dev/lib/libgtest.so /home/fsaintjacques/miniconda/envs/pyarrow-dev/lib/libgmock.so -ldl jemalloc_ep-prefix/src/jemalloc_ep/dist//lib/libjemalloc_pic.a -lrt -pthread -Wl,-rpath-link,/home/fsaintjacques/miniconda/envs/pyarrow-dev/lib && :

Reporter: Francois Saint-Jacques / @fsaintjacques

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

asfimport commented 5 years ago

Wes McKinney / @wesm: I've noticed this also (I install my development libraries in $HOME/local/lib and add that to my $LD_LIBRARY_PATH). How do you fix it?

asfimport commented 5 years ago

Francois Saint-Jacques / @fsaintjacques: When I investigated, I couldn't find who injected the first RPATH path. I simply delete the libarrow from the install destination. I wasted 2-3 hours to try to fix this without success.

asfimport commented 5 years ago

Wes McKinney / @wesm: https://stackoverflow.com/questions/32469953/why-is-cmake-designed-so-that-it-removes-runtime-path-when-installing