Hi, > * On the latter, I see that we're using snappy and lz4 from the system > (cmake finds them in the Arrow C++ build) but when the arrow.so is built > for the R package, there is -llz4 in the libs but no -lsnappy. The line > where the link libs are assembled from the C++ build via pkg-config is > here: https://github.com/apache/arrow/blob/master/r/configure#L185, maybe > the --static is relevant? Kou, do you know?
We can't use --libs-only-l and --libs-only-other at the same time. If we use both of them at the same time, --libs-only-other is ignored. The following outputs were executed on CentOS 7 with the official arrow-devel RPM package: $ pkg-config --libs-only-l --static arrow -larrow -larrow_bundled_dependencies -lbrotlidec -lbrotlienc -lz -llz4 -lzstd -lbrotlicommon $ pkg-config --libs-only-other --static arrow /usr/lib64/libsnappy.so /usr/lib64/libbz2.so -pthread $ pkg-config --libs-only-l --libs-only-other --static arrow -larrow -larrow_bundled_dependencies -lbrotlidec -lbrotlienc -lz -llz4 -lzstd -lbrotlicommon How about changing the line in r/configure to the following? PKG_LIBS="$PKG_LIBS `PKG_CONFIG_PATH=${LIB_DIR}/pkgconfig pkg-config --libs-only-l --static --silence-errors ${PKG_CONFIG_NAME}`" PKG_LIBS="$PKG_LIBS `PKG_CONFIG_PATH=${LIB_DIR}/pkgconfig pkg-config --libs-only-other --static --silence-errors ${PKG_CONFIG_NAME}`" Thanks, -- kou In <caocv4hjd4wz3ubcxz6krrpretjkjuyo7ktuv7ydngnzumyn...@mail.gmail.com> "Re: [R] Install arrow package: arrow.so undefined symbol" on Tue, 3 May 2022 14:05:09 -0400, Neal Richardson <neal.p.richard...@gmail.com> wrote: > Hmm, I see a couple of things: > > * There are two errors at the end, one about pthread_cancel and one about > undefined symbols for snappy. I can't tell if the pthread issue is fatal. > * On the latter, I see that we're using snappy and lz4 from the system > (cmake finds them in the Arrow C++ build) but when the arrow.so is built > for the R package, there is -llz4 in the libs but no -lsnappy. The line > where the link libs are assembled from the C++ build via pkg-config is > here: https://github.com/apache/arrow/blob/master/r/configure#L185, maybe > the --static is relevant? Kou, do you know? > * In terms of working around this, you have a few options, which are > described in more detail here: > https://arrow.apache.org/docs/r/articles/install.html > * Set NOT_CRAN=true and get a fully-functioning C++ binary downloaded > * Install a binary from RStudio Package Manager, if that's an option > * conda may also be an option > * If none of those work and you're building from source, you can set > EXTRA_CMAKE_FLAGS="-DSNAPPY_SOURCE=BUNDLED" to skip the system version of > snappy and build it in the Arrow build > * You may also want to use a newer devtoolset since you're building > with gcc 4.8, and some features aren't supported with that compiler. > > I've trimmed the installation logs to the relevant bits in the quoted reply > that follows, in case that's useful. > > Neal > > > On Tue, May 3, 2022 at 1:08 PM Rares Vernica <rvern...@gmail.com> wrote: > >> Hi Dragos, >> >> It still fails after setting the environment variable. Here is the log. >> >> Cheers, >> Rares >> >> ... >> > install.packages("arrow") >> Installing package into '/usr/lib64/R/library' >> ... >> *** Building libarrow from source >> For a faster, more complete installation, set the environment variable >> NOT_CRAN=true before installing >> See install vignette for details: >> https://cran.r-project.org/web/packages/arrow/vignettes/install.html >> *** Building with MAKEFLAGS= -j2 >> **** arrow with SOURCE_DIR='tools/cpp' >> BUILD_DIR='/tmp/RtmpObd2i3/file5310bef585' DEST_DIR='libarrow/arrow-7.0.0' >> CMAKE='/usr/bin/cmake3' EXTRA_CMAKE_FLAGS='' CC='gcc -m64 -std=gnu99' >> CXX='g++ -m64 -std=gnu++11' LDFLAGS='-Wl,-z,relro' ARROW_S3='OFF' >> ARROW_MIMALLOC='OFF' >> ... >> + /usr/bin/cmake3 -DARROW_BOOST_USE_SHARED=OFF -DARROW_BUILD_TESTS=OFF >> -DARROW_BUILD_SHARED=OFF -DARROW_BUILD_STATIC=ON -DARROW_COMPUTE=ON >> -DARROW_CSV=ON -DARROW_DATASET=ON -DARROW_DEPENDENCY_SOURCE=AUTO >> -DAWSSDK_SOURCE= -DARROW_FILESYSTEM=ON -DARROW_JEMALLOC=OFF >> -DARROW_MIMALLOC=OFF -DARROW_JSON=ON -DARROW_PARQUET=ON -DARROW_S3=OFF >> -DARROW_WITH_BROTLI=OFF -DARROW_WITH_BZ2=OFF -DARROW_WITH_LZ4=ON >> -DARROW_WITH_RE2=ON -DARROW_WITH_SNAPPY=ON -DARROW_WITH_UTF8PROC=ON >> -DARROW_WITH_ZLIB=OFF -DARROW_WITH_ZSTD=OFF >> -DARROW_VERBOSE_THIRDPARTY_BUILD=OFF -DCMAKE_BUILD_TYPE=Release >> -DCMAKE_INSTALL_LIBDIR=lib >> >> -DCMAKE_INSTALL_PREFIX=/tmp/Rtmp8rFBf9/R.INSTALL2f7e48ba40/arrow/libarrow/arrow-7.0.0 >> -DCMAKE_EXPORT_NO_PACKAGE_REGISTRY=ON >> -DCMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY=ON -DCMAKE_UNITY_BUILD=OFF -G >> 'Unix Makefiles' /tmp/Rtmp8rFBf9/R.INSTALL2f7e48ba40/arrow/tools/cpp >> -- Building using CMake version: 3.17.5 >> -- The C compiler identification is GNU 4.8.5 >> -- The CXX compiler identification is GNU 4.8.5 >> ... >> -- Looking for pthread.h >> -- Looking for pthread.h - found >> -- Performing Test CMAKE_HAVE_LIBC_PTHREAD >> -- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Failed >> -- Check if compiler accepts -pthread >> -- Check if compiler accepts -pthread - yes >> -- Found Threads: TRUE >> ... >> -- Found Snappy: /usr/lib64/libsnappy.so >> -- Providing CMake module for Snappy >> ... >> -- Checking for module 'liblz4' >> -- Found liblz4, version 1.8.3 >> -- Found Lz4: /usr/lib64/liblz4.so >> -- Providing CMake module for Lz4 >> ... >> -- Install configuration: "RELEASE" >> -- Installing: >> >> /tmp/Rtmp8rFBf9/R.INSTALL2f7e48ba40/arrow/libarrow/arrow-7.0.0/lib/cmake/arrow/FindSnappy.cmake >> -- Installing: >> >> /tmp/Rtmp8rFBf9/R.INSTALL2f7e48ba40/arrow/libarrow/arrow-7.0.0/lib/cmake/arrow/FindLz4.cmake >> ... >> >> PKG_CFLAGS=-I/tmp/Rtmp8rFBf9/R.INSTALL2f7e48ba40/arrow/libarrow/arrow-7.0.0/include >> -DARROW_R_WITH_ARROW -DARROW_R_WITH_PARQUET -DARROW_R_WITH_DATASET >> -DARROW_R_WITH_JSON >> >> PKG_LIBS=-L/tmp/Rtmp8rFBf9/R.INSTALL2f7e48ba40/arrow/libarrow/arrow-7.0.0/lib >> -larrow_dataset -lparquet -larrow -larrow -larrow_bundled_dependencies >> -llz4 -larrow -larrow_bundled_dependencies -larrow_dataset -lparquet >> ... >> g++ -m64 -std=gnu++11 -shared -L/usr/lib64/R/lib -Wl,-z,relro -o arrow.so >> RTasks.o altrep.o array.o array_to_vector.o arraydata.o arrowExports.o >> bridge.o buffer.o chunkedarray.o compression.o compute-exec.o compute.o >> config.o csv.o dataset.o datatype.o expression.o feather.o field.o >> filesystem.o imports.o io.o json.o memorypool.o message.o parquet.o >> r_to_arrow.o recordbatch.o recordbatchreader.o recordbatchwriter.o scalar.o >> schema.o symbols.o table.o threadpool.o type_infer.o >> -L/tmp/Rtmp8rFBf9/R.INSTALL2f7e48ba40/arrow/libarrow/arrow-7.0.0/lib >> -larrow_dataset -lparquet -larrow -larrow -larrow_bundled_dependencies >> -llz4 -larrow -larrow_bundled_dependencies -larrow_dataset -lparquet >> -L/usr/lib64/R/lib -lR >> installing to /usr/lib64/R/library/00LOCK-arrow/00new/arrow/libs >> ** R >> ... >> ** testing if installed package can be loaded from temporary location >> libgcc_s.so.1 must be installed for pthread_cancel to work >> sh: line 1: 3916 Aborted (core dumped) >> '/usr/lib64/R/bin/R' --no-save --slave 2>&1 < >> '/tmp/Rtmp8rFBf9/file2f3cba608e' >> Error: package or namespace load failed for 'arrow' in dyn.load(file, >> DLLpath = DLLpath, ...): >> unable to load shared object >> '/usr/lib64/R/library/00LOCK-arrow/00new/arrow/libs/arrow.so': >> /usr/lib64/R/library/00LOCK-arrow/00new/arrow/libs/arrow.so: undefined >> symbol: _ZN6snappy11RawCompressEPKcmPcPm >> Error: loading failed >> Execution halted >> ERROR: loading failed >> * removing '/usr/lib64/R/library/arrow' >>