presto icon indicating copy to clipboard operation
presto copied to clipboard

[native] relocation R_X86_64_PC32 against undefined hidden symbol error when make presto-native-execution

Open nelsonspark opened this issue 2 years ago • 6 comments

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

nelsonspark avatar Jun 27 '23 12:06 nelsonspark

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.

czentgr avatar Jun 27 '23 15:06 czentgr

PIE problem https://stackoverflow.com/questions/77762142/compiling-cups-with-afl-instrumentation-relocation-r-x86-64-32-against-c

lix19937 avatar Apr 25 '24 23:04 lix19937

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.

ScrapCodes avatar Aug 02 '24 12:08 ScrapCodes

[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.

ScrapCodes avatar Aug 02 '24 12:08 ScrapCodes

I have also run into the same issue with ubuntu

kishansairam9 avatar Sep 30 '24 17:09 kishansairam9

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.

ScrapCodes avatar Oct 04 '24 06:10 ScrapCodes

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.

@czentgr Based on your workaround, set LDFLAGS="-no-pie" before building seems fixed this issue on ubuntu 22.04 without changing any code.

unidevel avatar May 16 '25 15:05 unidevel