presto
presto copied to clipboard
[native] relocation R_X86_64_PC32 against undefined hidden symbol error when make presto-native-execution
I encountered following error when make presto-native-execution with lastest presto version
/usr/bin/ld: /usr/local/lib/libthriftprotocol.a(CompactProtocol.cpp.o): relocation R_X86_64_PC32 against undefined hidden symbol `_ZTCN6apache6thrift8protocol18TProtocolExceptionE0_NS0_17TLibraryExceptionE' can not be used when making a PIE object /usr/bin/ld: bad value
Env:
System: Ubuntu 22.04.2 LTS make version: GNU Make 4.3 gcc version: gcc (Ubuntu 11.3.0-1ubuntu1~22.04.1) 11.3.0 g++ version: gcc (Ubuntu 11.3.0-1ubuntu1~22.04.1) 11.3.0 Log detail:
cmake --build _build/release -j 4 [1/1] Linking CXX executable presto_cpp/main/presto_server FAILED: presto_cpp/main/presto_server : && /usr/bin/c++ -mavx2 -mfma -mavx -mf16c -mlzcnt -std=c++17 -mbmi2 -Werror -Wno-nullability-completeness -Wno-deprecated-declarations -O3 -DNDEBUG velox/velox/connectors/hive/CMakeFiles/velox_hive_connector.dir/FileHandle.cpp.o velox/velox/connectors/hive/CMakeFiles/velox_hive_connector.dir/HiveConfig.cpp.o velox/velox/connectors/hive/CMakeFiles/velox_hive_connector.dir/HiveConnector.cpp.o velox/velox/connectors/hive/CMakeFiles/velox_hive_connector.dir/HiveDataSink.cpp.o velox/velox/connectors/hive/CMakeFiles/velox_hive_connector.dir/HiveDataSource.cpp.o velox/velox/connectors/hive/CMakeFiles/velox_hive_connector.dir/HivePartitionUtil.cpp.o velox/velox/connectors/hive/CMakeFiles/velox_hive_connector.dir/PartitionIdGenerator.cpp.o velox/velox/connectors/hive/CMakeFiles/velox_hive_connector.dir/TableHandle.cpp.o velox/velox/connectors/tpch/CMakeFiles/velox_tpch_connector.dir/TpchConnector.cpp.o presto_cpp/main/CMakeFiles/presto_server.dir/PrestoMain.cpp.o -o presto_cpp/main/presto_server -Wl,-rpath,/usr/local/lib presto_cpp/main/types/CMakeFiles/presto_type_converter.dir/./TypeSignatureTypeConverter.cpp.o presto_cpp/main/types/CMakeFiles/presto_type_converter.dir/./antlr/TypeSignatureLexer.cpp.o presto_cpp/main/types/CMakeFiles/presto_type_converter.dir/./antlr/TypeSignatureParser.cpp.o presto_cpp/main/types/CMakeFiles/presto_types.dir/./PrestoToVeloxQueryPlan.cpp.o presto_cpp/main/types/CMakeFiles/presto_types.dir/./PrestoToVeloxExpr.cpp.o presto_cpp/main/types/CMakeFiles/presto_types.dir/./PrestoToVeloxSplit.cpp.o presto_cpp/presto_protocol/CMakeFiles/presto_protocol.dir/./presto_protocol.cpp.o presto_cpp/presto_protocol/CMakeFiles/presto_protocol.dir/./Base64Util.cpp.o presto_cpp/presto_protocol/CMakeFiles/presto_protocol.dir/./DataSize.cpp.o presto_cpp/presto_protocol/CMakeFiles/presto_protocol.dir/./Duration.cpp.o presto_cpp/presto_protocol/CMakeFiles/presto_protocol.dir/./Connectors.cpp.o presto_cpp/main/libpresto_server_lib.a velox/velox/functions/prestosql/registration/libvelox_functions_prestosql.a velox/velox/functions/prestosql/aggregates/libvelox_aggregates.a velox/velox/serializers/libvelox_presto_serializer.a presto_cpp/main/connectors/hive/storage_adapters/libpresto_adapters.a presto_cpp/main/common/libpresto_exception.a presto_cpp/main/http/libpresto_http.a presto_cpp/main/http/filters/libhttp_filters.a /usr/local/lib/libproxygenhttpserver.a /usr/local/lib/libproxygen.a /usr/local/lib/libwangle.a /usr/local/lib/libfizz.a /usr/local/lib/libfmt.a presto_cpp/main/operators/libpresto_operators.a presto_cpp/main/common/libpresto_common.a velox/velox/row/libvelox_row_fast.a velox/velox/functions/prestosql/window/libvelox_window.a velox/velox/functions/lib/window/libvelox_functions_window.a /usr/local/lib/libantlr4-runtime.so -lpthread velox/velox/dwio/parquet/libvelox_dwio_parquet_reader.a velox/velox/dwio/parquet/duckdb_reader/libvelox_dwio_duckdb_parquet_reader.a velox/velox/duckdb/memory/libvelox_duckdb_allocator.a velox/velox/duckdb/conversion/libvelox_duckdb_conversion.a velox/velox/external/duckdb/tpch/libtpch_extension.a velox/velox/dwio/parquet/reader/libvelox_dwio_native_parquet_reader.a velox/velox/dwio/parquet/thrift/libvelox_dwio_parquet_thrift.a velox/velox/dwio/parquet/libvelox_dwio_parquet_writer.a velox/velox/dwio/parquet/writer/libvelox_dwio_arrow_parquet_writer.a velox/third_party/arrow_ep/install/lib/libparquet.a velox/third_party/arrow_ep/install/lib/libarrow.a /usr/local/lib/libthrift.a presto_cpp/main/thrift/libpresto_thrift-cpp2.a /usr/local/lib/libthriftcpp2.a /usr/local/lib/libthriftprotocol.a /usr/local/lib/libthriftmetadata.a /usr/local/lib/libthrift-core.a /usr/local/lib/libtransport.a presto_cpp/main/thrift/libpresto_thrift_extra.a velox/velox/functions/prestosql/libvelox_functions_prestosql_impl.a velox/velox/functions/prestosql/json/libvelox_functions_json.a velox/velox/external/md5/libmd5.a velox/velox/functions/prestosql/types/libvelox_presto_types.a velox/velox/functions/lib/libvelox_is_null_functions.a _deps/simdjson-build/libsimdjson.a velox/velox/functions/lib/libvelox_functions_lib.a velox/velox/common/hyperloglog/libvelox_common_hyperloglog.a velox/velox/functions/lib/aggregates/libvelox_functions_aggregates.a velox/velox/serializers/libvelox_presto_serializer.a velox/velox/exec/libvelox_exec.a velox/velox/codegen/libvelox_codegen.a velox/velox/exec/libvelox_exec.a velox/velox/codegen/libvelox_codegen.a velox/velox/vector/arrow/libvelox_arrow_bridge.a velox/velox/connectors/hive/libvelox_hive_partition_function.a velox/velox/dwio/dwrf/reader/libvelox_dwio_dwrf_reader.a velox/velox/dwio/dwrf/writer/libvelox_dwio_dwrf_writer.a velox/velox/dwio/dwrf/common/libvelox_dwio_dwrf_common.a velox/velox/dwio/common/libvelox_dwio_common.a velox/velox/dwio/common/exception/libvelox_dwio_common_exception.a velox/velox/expression/libvelox_expression.a velox/velox/core/libvelox_core.a velox/velox/functions/lib/libvelox_functions_util.a velox/velox/expression/libvelox_expression_functions.a velox/velox/expression/type_calculation/libvelox_type_calculation.a velox/velox/dwio/common/encryption/libvelox_dwio_common_encryption.a velox/velox/common/caching/libvelox_caching.a velox/velox/dwio/common/compression/libvelox_dwio_common_compression.a /usr/lib/x86_64-linux-gnu/libsnappy.so velox/velox/dwio/dwrf/utils/libvelox_dwio_dwrf_utils.a velox/velox/dwio/dwrf/proto/libvelox_dwio_dwrf_proto.a /usr/lib/x86_64-linux-gnu/libprotobuf.so /usr/lib/x86_64-linux-gnu/liblz4.so /usr/lib/x86_64-linux-gnu/liblzo2.so /usr/lib/x86_64-linux-gnu/libzstd.so /usr/lib/x86_64-linux-gnu/libz.so velox/velox/common/file/libvelox_file.a velox/velox/connectors/libvelox_connector.a velox/velox/core/libvelox_config.a velox/velox/tpch/gen/libvelox_tpch_gen.a velox/velox/vector/libvelox_vector.a velox/velox/common/time/libvelox_time.a velox/velox/type/libvelox_type.a velox/velox/type/tz/libvelox_type_tz.a velox/velox/common/serialization/libvelox_serialization.a velox/velox/external/date/libvelox_external_date.a /usr/lib/x86_64-linux-gnu/libre2.so /usr/lib/x86_64-linux-gnu/libre2.so velox/velox/common/encode/libvelox_encode.a velox/velox/buffer/libvelox_buffer.a velox/velox/common/memory/libvelox_memory.a velox/velox/common/testutil/libvelox_test_util.a velox/velox/common/base/libvelox_common_base.a velox/velox/common/base/libvelox_exception.a velox/velox/common/process/libvelox_process.a /usr/local/lib/libfolly.a /usr/lib/x86_64-linux-gnu/libdouble-conversion.so /usr/lib/x86_64-linux-gnu/libboost_context.so.1.74.0 /usr/lib/x86_64-linux-gnu/libevent.so /usr/lib/x86_64-linux-gnu/libz.so /usr/lib/x86_64-linux-gnu/libglog.so /usr/lib/x86_64-linux-gnu/libgflags.so.2.2.2 /usr/lib/x86_64-linux-gnu/libssl.so /usr/lib/x86_64-linux-gnu/libcrypto.so /usr/lib/x86_64-linux-gnu/libbz2.so /usr/lib/x86_64-linux-gnu/libboost_regex.so.1.74.0 /usr/local/lib/libfmt.a /usr/lib/x86_64-linux-gnu/libboost_filesystem.so.1.74.0 /usr/lib/x86_64-linux-gnu/libboost_program_options.so.1.74.0 /usr/lib/x86_64-linux-gnu/libboost_system.so.1.74.0 /usr/lib/x86_64-linux-gnu/libboost_thread.so.1.74.0 /usr/lib/x86_64-linux-gnu/libboost_atomic.so.1.74.0 /usr/lib/x86_64-linux-gnu/liblzma.so /usr/lib/x86_64-linux-gnu/libsnappy.so /usr/lib/x86_64-linux-gnu/liblz4.so /usr/lib/x86_64-linux-gnu/libzstd.so /usr/lib/x86_64-linux-gnu/libsodium.so -ldl /usr/lib/x86_64-linux-gnu/libunwind.so
cd presto/presto-native-execution ./scripts/setup-ubuntu.sh make this gave me error:
/usr/lib/x86_64-linux-gnu/libglog.so /usr/lib/x86_64-linux-gnu/libgflags.so.2.2.2 -lpthread lib/libgtest.a velox/velox/external/duckdb/tpch/dbgen/libdbgen.a velox/velox/external/duckdb/libduckdb.a && : /usr/bin/ld: /usr/local/lib/libthriftprotocol.a(CompactProtocol.cpp.o): relocation R_X86_64_PC32 against undefined hidden symbol `_ZTCN6apache6thrift8protocol18TProtocolExceptionE0_NS0_17TLibraryExceptionE' can not be used when making a PIE object /usr/bin/ld: bad value collect2: error: ld returned 1 exit status ninja: build stopped: subcommand failed. make[1]: *** [Makefile:68:build] Errorcode 1 make[1]: Leave directory “***/presto/presto-native-execution” make: *** [Makefile:75:release] Errorcode 2
A workaround is to turn of position independent execution (PIE) by adding the following to
presto_cpp/main/CMakeLists.txt below add_executable(presto_server PrestoMain.cpp)
target_link_options(presto_server PRIVATE "-no-pie")
so it looks like this
add_executable(presto_server PrestoMain.cpp)
target_link_options(presto_server PRIVATE "-no-pie")
This turns off position independent execution. This is not really desirable in "production" as PIE is a pre-condition to use address space layout randomization (ASLR) which is a security feature.
The real fix likely lies within fbthrift.
PIE problem https://stackoverflow.com/questions/77762142/compiling-cups-with-afl-instrumentation-relocation-r-x86-64-32-against-c
I am hitting the same issue, the workaround did not help.
My GCC version: gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
On the fresh clone of latest master.
I have used scripts/setup-ubuntu.sh to setup dependencies. It finished successfully.
[WARNING:] Could not load Thrift standard libraries: Could not find include file thrift/lib/thrift/schema.thrift
[1124/1190] Building CXX object presto_cpp/main/thrift/CMakeFiles/presto_thrift-cpp2-obj.dir/presto_cpp/main/thrift/gen-cpp2/presto_thrift_data.cpp.o
/tmp/ccdq84bm.s: Assembler messages:
/tmp/ccdq84bm.s:4: Warning: setting incorrect section attributes for .rodata.thrift.data
[1188/1190] Linking CXX executable presto_cpp/main/presto_server
Seems to be related.
I have also run into the same issue with ubuntu
For me it turned out that, Gtest on my system was built from source(w/o PIE) and installed. Since this version was higher than system installed it was picked up by velox build. Once this was deleted and system installed Gtest was reinstated the problem was solved.
A workaround is to turn of position independent execution (PIE) by adding the following to
presto_cpp/main/CMakeLists.txtbelowadd_executable(presto_server PrestoMain.cpp)target_link_options(presto_server PRIVATE "-no-pie")so it looks like this
add_executable(presto_server PrestoMain.cpp) target_link_options(presto_server PRIVATE "-no-pie")This turns off position independent execution. This is not really desirable in "production" as PIE is a pre-condition to use address space layout randomization (ASLR) which is a security feature.
The real fix likely lies within fbthrift.
@czentgr Based on your workaround, set LDFLAGS="-no-pie" before building seems fixed this issue on ubuntu 22.04 without changing any code.