ARM平台调用libgandiva_jni.so抛出异常(x86平台运行正常)
ARM平台下libgandiva_jni.so调用异常问题排查
Arrow 9.0.0版本异常情况
- 现象:相同Java程序调用Arrow库的libgandiva_jni.so时,x86平台运行正常,ARM平台编译成功但调用时抛出未定义符号异常
- 异常信息:
undefined symbol: _ZN4llvm3sys14DynamicLibrary19getPermanentLibraryEPKcPSs
- 定位到的问题方法:
llvm::sys::DynamicLibrary::getPermanentLibrary(char const*, std::basic_string<char, std::char_traits, std::allocator >)
- 确认情况:该方法位于
libLLVMSupport.a静态库中,且已将该库链接到共享库,链接命令如下:
/usr/bin/c++ -fPIC -Wno-noexcept-type -fdiagnostics-color=always -O3 -DNDEBUG -Wall -fno-semantic-interposition -march=armv8-a -O3 -DNDEBUG -Wl,--version-script=/path/to/arrow-9.0.0/cpp/src/gandiva/jni/symbols.map -shared -Wl,-soname,libgandiva_jni.so.900 -o ../../../release/libgandiva_jni.so.900.0.0 CMakeFiles/gandiva_jni_objlib.dir/config_builder.cc.o CMakeFiles/gandiva_jni_objlib.dir/config_holder.cc.o CMakeFiles/gandiva_jni_objlib.dir/expression_registry_helper.cc.o CMakeFiles/gandiva_jni_objlib.dir/jni_common.cc.o CMakeFiles/gandiva_jni_objlib.dir/Types.pb.cc.o ../../../protobuf_ep-install/lib/libprotobuf.a ../../../release/libgandiva.a ../../../release/libarrow.a ../../../protobuf_ep-install/lib/libprotobuf.a ../../../brotli_ep/src/brotli_ep-install/lib/libbrotlienc-static.a ../../../brotli_ep/src/brotli_ep-install/lib/libbrotlidec-static.a ../../../brotli_ep/src/brotli_ep-install/lib/libbrotlicommon-static.a ../../../bzip2_ep-install/lib/libbz2.a ../../../lz4_ep-prefix/src/lz4_ep/lib/liblz4.a ../../../snappy_ep/src/snappy_ep-install/lib/libsnappy.a ../../../zstd_ep-install/lib64/libzstd.a ../../../orc_ep-install/lib/liborc.a ../../../jemalloc_ep-prefix/src/jemalloc_ep/dist//lib/libjemalloc_pic.a -pthread /usr/local/llvm/lib/libLLVMMCJIT.a /usr/local/llvm/lib/libLLVMExecutionEngine.a /usr/local/llvm/lib/libLLVMOrcTargetProcess.a /usr/local/llvm/lib/libLLVMOrcShared.a /usr/local/llvm/lib/libLLVMRuntimeDyld.a /usr/local/llvm/lib/libLLVMipo.a /usr/local/llvm/lib/libLLVMFrontendOpenMP.a /usr/local/llvm/lib/libLLVMIRReader.a /usr/local/llvm/lib/libLLVMAsmParser.a /usr/local/llvm/lib/libLLVMVectorize.a /usr/local/llvm/lib/libLLVMInstrumentation.a /usr/local/llvm/lib/libLLVMLinker.a /usr/local/llvm/lib/libLLVMAArch64CodeGen.a /usr/local/llvm/lib/libLLVMAsmPrinter.a /usr/local/llvm/lib/libLLVMDebugInfoMSF.a /usr/local/llvm/lib/libLLVMGlobalISel.a /usr/local/llvm/lib/libLLVMSelectionDAG.a /usr/local/llvm/lib/libLLVMCodeGen.a /usr/local/llvm/lib/libLLVMTarget.a /usr/local/llvm/lib/libLLVMBitWriter.a /usr/local/llvm/lib/libLLVMScalarOpts.a /usr/local/llvm/lib/libLLVMAggressiveInstCombine.a /usr/local/llvm/lib/libLLVMInstCombine.a /usr/local/llvm/lib/libLLVMTransformUtils.a /usr/local/llvm/lib/libLLVMAnalysis.a /usr/local/llvm/lib/libLLVMProfileData.a /usr/local/llvm/lib/libLLVMDebugInfoDWARF.a /usr/local/llvm/lib/libLLVMObject.a /usr/local/llvm/lib/libLLVMBitReader.a /usr/local/llvm/lib/libLLVMTextAPI.a /usr/local/llvm/lib/libLLVMCFGuard.a /usr/local/llvm/lib/libLLVMCore.a /usr/local/llvm/lib/libLLVMRemarks.a /usr/local/llvm/lib/libLLVMBitstreamReader.a /usr/local/llvm/lib/libLLVMAArch64AsmParser.a /usr/local/llvm/lib/libLLVMMCParser.a /usr/local/llvm/lib/libLLVMAArch64Disassembler.a /usr/local/llvm/lib/libLLVMAArch64Desc.a /usr/local/llvm/lib/libLLVMMCDisassembler.a /usr/local/llvm/lib/libLLVMAArch64Info.a /usr/local/llvm/lib/libLLVMMC.a /usr/local/llvm/lib/libLLVMBinaryFormat.a /usr/local/llvm/lib/libLLVMDebugInfoCodeView.a /usr/local/llvm/lib/libLLVMAArch64Utils.a /usr/local/llvm/lib/libLLVMSupport.a /usr/lib64/libz.so -lrt -ldl -lpthread -lm /usr/lib64/libtinfo.so /usr/local/llvm/lib/libLLVMDemangle.a /usr/lib64/libssl.so /usr/lib64/libcrypto.so ../../../re2_ep-install/lib/libre2.a ../../../utf8proc_ep-install/lib/libutf8proc.a
Arrow 16.1版本异常情况
- 现象:使用官方预编译的libgandiva_jni.so,ARM平台调用时抛出LLJIT实例创建失败异常
- 异常信息:
GandivaException: Failed to make LLVM module due to Could not create LLJIT instance: Symbols not found: [ llvm_orc_registerEHFrameSectionWrapper ]
环境信息
- 操作系统:CentOS v7.6
- 工具:GCC 8.3.1,LLVM 14
- ARM平台编译Arrow 9的CMake命令:
cmake .. -DARROW_GANDIVA_JAVA=ON -DARROW_GANDIVA=ON -DARROW_WITH_RE2=ON -DARROW_WITH_UTF8PROC=ON
内容的提问来源于stack exchange,提问作者Nai yan
相关产品推荐
相关产品推荐

