Undefined Reference to arrow::ImportRecordBatchReader
- Dominant language
- C++
- Stars
- 17.1k
- Forks
- 4.3k
- Avg merge
- 3d 13h
- Merged PRs (30d)
- 88
Description
Hello I am trying to use Arrow in one of my company projects, however I am getting an undefined reference to arrow::ImportRecordBatchReader when trying to use it.
Some context, I was previously using arrow from the following commit (c3d031250a7fdcfee5e576833bf6f39097602c30) and I could use arrow::ImportRecrodBatchReader just fine. However, when I upgraded arrow to a more recent version (13a7b605ede88ca15b053f119909c48d0919c6f8) the undefined reference showed up.
I extracted some pieces of code which might be relevant.
How Arrow is added to the project:
``` cmake
ExternalProject_Add(
ArrowDownload
GIT_REPOSITORY "https://github.com/apache/arrow"
GIT_TAG 13a7b605ede88ca15b053f119909c48d0919c6f8
SOURCE_DIR "${CMAKE_SOURCE_DIR}/third_party/arrow/arrow-9.0.0"
BUILD_BYPRODUCTS
/libarrow.so
CONFIGURE_COMMAND
${CMAKE_COMMAND}
-G${CMAKE_GENERATOR}
#
# Compiler options
#
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
-DBUILD_WARNING_LEVEL=PRODUCTION
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
-DCMAKE_CXX_COMPILER_LAUNCHER=${CMAKE_CXX_COMPILER_LAUNCHER}
-DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}
-DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD}
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
-DCMAKE_C_COMPILER_LAUNCHER=${CMAKE_C_COMPILER_LAUNCHER}
#
# Install options
#
-DCMAKE_INSTALL_PREFIX=${THIRD_PARTY_INSTALL_PREFIX}
-DCMAKE_INSTALL_LIBDIR=${CMAKE_INSTALL_LIBDIR}
-DCMAKE_MODULE_PATH=${CMAKE_MODULE_PATH}
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
#
# Apache Arrow specific options
#
-DARROW_ALTIVEC=OFF
-DARROW_USE_CCACHE=ON
-DARROW_BOOST_USE_SHARED=OFF
-DARROW_BUILD_SHARED=ON
-DARROW_BUILD_STATIC=OFF
-DARROW_BUILD_UTILITIES=OFF
-DARROW_COMPUTE=OFF
-DARROW_DATASET=OFF
-DARROW_FLIGHT=OFF
-DARROW_GFLAGS_USE_SHARED=OFF
-DARROW_HDFS=OFF
-DARROW_IPC=ON
-DARROW_JSON=OFF
-DARROW_CSV=OFF
-DARROW_JEMALLOC=OFF
-DARROW_ORC=OFF
-DARROW_PARQUET=OFF
-DARROW_PROTOBUF_USE_SHARED=OFF
-DARROW_USE_GLOG=OFF
-DARROW_SIMD_LEVEL=NONE
-DARROW_RUNTIME_SIMD_LEVEL=NONE
-DARROW_WITH_BROTLI=OFF
-DARROW_WITH_LZ4=OFF
-DARROW_WITH_PROTOBUF=OFF
-DARROW_WITH_RAPIDJSON=OFF
-DARROW_WITH_SNAPPY=OFF
-DARROW_WITH_ZLIB=OFF
-DARROW_WITH_ZSTD=OFF
-DBOOST_SOURCE=AUTO
/cpp
CMAKE_ARGS -Wno-dev
UPDATE_COMMAND "")
set(ARROW_INSTALL_DIR ${THIRD_PARTY_INSTALL_PREFIX})
set(ARROW_INCLUDE ${ARROW_INSTALL_DIR}/include CACHE INTERNAL "")
set(ARROW_LIBS ${CMAKE_INSTALL_LIBDIR})
add_library(ArrowLib SHARED IMPORTED)
set_target_properties(ArrowLib
PROPERTIES
IMPORTED_LOCATION
${ARROW_LIBS}/libarrow.so
)
```
Extract of the error:
```
undefined reference to `arrow::ImportRecordBatchReader(arrow::ArrowArrayStream*)'
```
If anyone have any idea on why this happens I would appreciate it.
Thanks for your time!
Contributor guide
Research direction
Start with the ExternalProject_Add configuration and the imported ArrowLib target shown in the issue, comparing the two Arrow commits and the generated link command. Inspect whether the built libarrow.so exports arrow::ImportRecordBatchReader and whether the consumer links the matching IPC-enabled library. Done means identifying the build or linkage mismatch and documenting a reproducible correction.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cmake, cpp
- Domain
- build-system
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 28/100