New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[C++] Support LTO for R #25678
Comments
Neal Richardson / @nealrichardson: Even with that on in cmake, it fails: https://github.com/nealrichardson/arrow/runs/1088290997?check_suite_focus=true C:/rtools40/mingw32/bin/g++ -shared -s -static-libgcc -o arrow.dll tmp.def array.o array_from_vector.o array_to_vector.o arraydata.o arrowExports.o buffer.o chunkedarray.o compression.o compute.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 py-to-r.o recordbatch.o recordbatchreader.o recordbatchwriter.o scalar.o schema.o symbols.o table.o threadpool.o -L../windows/arrow-1.0.1.9000/lib-8.3.0/i386 -L../windows/arrow-1.0.1.9000/lib/i386 -lparquet -larrow_dataset -larrow -larrow_bundled_dependencies -lthrift -lsnappy -lz -lzstd -llz4 -lbcrypt -lpsapi -lcrypto -lcrypt32 -laws-cpp-sdk-config -laws-cpp-sdk-transfer -laws-cpp-sdk-identity-management -laws-cpp-sdk-cognito-identity -laws-cpp-sdk-sts -laws-cpp-sdk-s3 -laws-cpp-sdk-core -laws-c-event-stream -laws-checksums -laws-c-common -lUserenv -lversion -lws2_32 -lBcrypt -lWininet -lwinhttp -LC:/R/bin/i386 -lR
lto1.exe: internal compiler error: in add_symbol_to_partition_1, at lto/lto-partition.c:155
libbacktrace could not find executable to open
Please submit a full bug report,
with preprocessed source if appropriate.
See <https://github.com/r-windows> for instructions.
lto-wrapper.exe: fatal error: C:\rtools40\mingw32\bin\g++.exe returned 1 exit status
compilation terminated.
C:/rtools40/mingw32/bin/../lib/gcc/i686-w64-mingw32/8.3.0/../../../../i686-w64-mingw32/bin/ld.exe: error: lto-wrapper failed
collect2.exe: error: ld returned 1 exit status
C:\rtools40\mingw64\bin\nm.exe: D:/a/arrow/arrow/check/arrow.Rcheck/00_pkg_src/arrow/src-i386/array.o: plugin needed to handle lto object
C:\rtools40\mingw64\bin\nm.exe: D:/a/arrow/arrow/check/arrow.Rcheck/00_pkg_src/arrow/src-i386/array_from_vector.o: plugin needed to handle lto object
...
C:\rtools40\mingw64\bin\nm.exe: D:/a/arrow/arrow/check/arrow.Rcheck/00_pkg_src/arrow/src-i386/threadpool.o: plugin needed to handle lto object
no DLL was created Googling the "plugin needed to handle lto object" error message, it looks like there may be some necessary library missing from Rtools? https://stackoverflow.com/questions/32221221/mingw-x64-windows-plugin-needed-to-handle-lto-object/32461766#32461766 |
Antoine Pitrou / @pitrou: |
Neal Richardson / @nealrichardson: |
Antoine Pitrou / @pitrou: |
Antoine Pitrou / @pitrou: |
Antoine Pitrou / @pitrou: |
Jeroen / @jeroen:
g++ -std=gnu++11 -shared -s -static-libgcc -o arrow.dll tmp.def array.o array_to_vector.o arraydata.o arrowExports.o buffer.o chunkedarray.o compression.o compute.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 py-to-r.o r_to_arrow.o recordbatch.o recordbatchreader.o recordbatchwriter.o runtimeinfo.o scalar.o schema.o symbols.o table.o threadpool.o type_infer.o -L../windows/arrow-4.0.0/lib-10.2.0/x64 -L../windows/arrow-4.0.0/lib/x64-ucrt -lparquet -larrow_dataset -larrow -larrow_bundled_dependencies -lutf8proc -lthrift -lsnappy -lz -lzstd -llz4 -lbcrypt -lpsapi -lcrypto -lcrypt32 -lre2 -laws-cpp-sdk-config -laws-cpp-sdk-transfer -laws-cpp-sdk-identity-management -laws-cpp-sdk-cognito-identity -laws-cpp-sdk-sts -laws-cpp-sdk-s3 -laws-cpp-sdk-core -laws-c-event-stream -laws-checksums -laws-c-common -lUserenv -lversion -lws2_32 -lBcrypt -lWininet -lwinhttp -L/ucrt64/lib/x64 -L/ucrt64/lib -LC:/PROGRA~1/R/R-devel/bin/x64 -lR
`_ZTCN5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEEE0_NS0_11InputStreamE' referenced in section `.rdata$_ZTTN5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEEE[_ZTTN5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEEE]' of ../windows/arrow-4.0.0/lib/x64-ucrt/libparquet.a(schema.cc.obj): defined in discarded section `.gnu.linkonce.t._ZTVN5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEEE[_ZTCN5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEEE0_NS0_11InputStreamE]' of io.o (symbol from plugin)
`_ZTCN5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEEE0_NS0_11InputStreamE' referenced in section `.rdata$_ZTTN5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEEE[_ZTTN5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEEE]' of ../windows/arrow-4.0.0/lib/x64-ucrt/libparquet.a(schema.cc.obj): defined in discarded section `.gnu.linkonce.t._ZTVN5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEEE[_ZTCN5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEEE0_NS0_11InputStreamE]' of io.o (symbol from plugin)
`_ZTCN5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEEE0_NS0_11InputStreamE' referenced in section `.rdata$_ZTTN5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEEE[_ZTTN5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEEE]' of ../windows/arrow-4.0.0/lib/x64-ucrt/libparquet.a(schema.cc.obj): defined in discarded section `.gnu.linkonce.t._ZTVN5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEEE[_ZTCN5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEEE0_NS0_11InputStreamE]' of io.o (symbol from plugin)
`_ZThn24_N5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEE4SeekEx' referenced in section `.rdata$_ZTVN5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEEE[_ZTVN5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEEE]' of ../windows/arrow-4.0.0/lib/x64-ucrt/libparquet.a(schema.cc.obj): defined in discarded section `.gnu.linkonce.t._ZN5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEE4SeekEx[_ZThn24_N5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEE4SeekEx]' of io.o (symbol from plugin)
`_ZTv0_n32_N5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEE5CloseEv' referenced in section `.rdata$_ZTVN5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEEE[_ZTVN5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEEE]' of ../windows/arrow-4.0.0/lib/x64-ucrt/libparquet.a(schema.cc.obj): defined in discarded section `.gnu.linkonce.t._ZN5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEE5CloseEv[_ZTv0_n32_N5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEE5CloseEv]' of io.o (symbol from plugin)
`_ZTv0_n40_N5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEE5AbortEv' referenced in section `.rdata$_ZTVN5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEEE[_ZTVN5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEEE]' of ../windows/arrow-4.0.0/lib/x64-ucrt/libparquet.a(schema.cc.obj): defined in discarded section `.gnu.linkonce.t._ZN5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEE5AbortEv[_ZTv0_n40_N5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEE5AbortEv]' of io.o (symbol from plugin)
`_ZTv0_n48_NK5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEE4TellEv' referenced in section `.rdata$_ZTVN5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEEE[_ZTVN5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEEE]' of ../windows/arrow-4.0.0/lib/x64-ucrt/libparquet.a(schema.cc.obj): defined in discarded section `.gnu.linkonce.t._ZNK5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEE4TellEv[_ZTv0_n48_NK5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEE4TellEv]' of io.o (symbol from plugin)
`_ZTv0_n32_N5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEE5CloseEv' referenced in section `.text' of ../windows/arrow-4.0.0/lib/x64-ucrt/libarrow_dataset.a(file_base.cc.obj): defined in discarded section `.gnu.linkonce.t._ZN5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEE5CloseEv[_ZTv0_n32_N5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEE5CloseEv]' of io.o (symbol from plugin)
`_ZTv0_n32_N5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEE5CloseEv' referenced in section `.text' of ../windows/arrow-4.0.0/lib/x64-ucrt/libarrow_dataset.a(file_base.cc.obj): defined in discarded section `.gnu.linkonce.t._ZN5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEE5CloseEv[_ZTv0_n32_N5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEE5CloseEv]' of io.o (symbol from plugin)
`_ZTv0_n32_N5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEE5CloseEv' referenced in section `.rdata$_ZTCN5arrow2io12BufferReaderE0_NS0_8internal34RandomAccessFileConcurrencyWrapperIS1_EE[_ZTCN5arrow2io12BufferReaderE0_NS0_8internal34RandomAccessFileConcurrencyWrapperIS1_EE]' of ../windows/arrow-4.0.0/lib/x64-ucrt/libarrow.a(memory.cc.obj): defined in discarded section `.gnu.linkonce.t._ZN5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEE5CloseEv[_ZTv0_n32_N5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEE5CloseEv]' of io.o (symbol from plugin)
`_ZTv0_n40_N5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEE5AbortEv' referenced in section `.rdata$_ZTCN5arrow2io12BufferReaderE0_NS0_8internal34RandomAccessFileConcurrencyWrapperIS1_EE[_ZTCN5arrow2io12BufferReaderE0_NS0_8internal34RandomAccessFileConcurrencyWrapperIS1_EE]' of ../windows/arrow-4.0.0/lib/x64-ucrt/libarrow.a(memory.cc.obj): defined in discarded section `.gnu.linkonce.t._ZN5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEE5AbortEv[_ZTv0_n40_N5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEE5AbortEv]' of io.o (symbol from plugin)
`_ZTv0_n48_NK5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEE4TellEv' referenced in section `.rdata$_ZTCN5arrow2io12BufferReaderE0_NS0_8internal34RandomAccessFileConcurrencyWrapperIS1_EE[_ZTCN5arrow2io12BufferReaderE0_NS0_8internal34RandomAccessFileConcurrencyWrapperIS1_EE]' of ../windows/arrow-4.0.0/lib/x64-ucrt/libarrow.a(memory.cc.obj): defined in discarded section `.gnu.linkonce.t._ZNK5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEE4TellEv[_ZTv0_n48_NK5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEE4TellEv]' of io.o (symbol from plugin)
`_ZThn24_N5arrow2io12BufferReaderD1Ev' referenced in section `.rdata$_ZTVN5arrow2io12BufferReaderE[_ZTVN5arrow2io12BufferReaderE]' of ../windows/arrow-4.0.0/lib/x64-ucrt/libarrow.a(memory.cc.obj): defined in discarded section `.gnu.linkonce.t._ZN5arrow2io12BufferReaderD1Ev[_ZThn24_N5arrow2io12BufferReaderD1Ev]' of io.o (symbol from plugin)
`_ZThn24_N5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEE4SeekEx' referenced in section `.rdata$_ZTVN5arrow2io12BufferReaderE[_ZTVN5arrow2io12BufferReaderE]' of ../windows/arrow-4.0.0/lib/x64-ucrt/libarrow.a(memory.cc.obj): defined in discarded section `.gnu.linkonce.t._ZN5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEE4SeekEx[_ZThn24_N5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEE4SeekEx]' of io.o (symbol from plugin)
`_ZTv0_n32_N5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEE5CloseEv' referenced in section `.rdata$_ZTVN5arrow2io12BufferReaderE[_ZTVN5arrow2io12BufferReaderE]' of ../windows/arrow-4.0.0/lib/x64-ucrt/libarrow.a(memory.cc.obj): defined in discarded section `.gnu.linkonce.t._ZN5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEE5CloseEv[_ZTv0_n32_N5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEE5CloseEv]' of io.o (symbol from plugin)
`_ZTv0_n40_N5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEE5AbortEv' referenced in section `.rdata$_ZTVN5arrow2io12BufferReaderE[_ZTVN5arrow2io12BufferReaderE]' of ../windows/arrow-4.0.0/lib/x64-ucrt/libarrow.a(memory.cc.obj): defined in discarded section `.gnu.linkonce.t._ZN5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEE5AbortEv[_ZTv0_n40_N5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEE5AbortEv]' of io.o (symbol from plugin)
`_ZTv0_n48_NK5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEE4TellEv' referenced in section `.rdata$_ZTVN5arrow2io12BufferReaderE[_ZTVN5arrow2io12BufferReaderE]' of ../windows/arrow-4.0.0/lib/x64-ucrt/libarrow.a(memory.cc.obj): defined in discarded section `.gnu.linkonce.t._ZNK5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEE4TellEv[_ZTv0_n48_NK5arrow2io8internal34RandomAccessFileConcurrencyWrapperINS0_12BufferReaderEE4TellEv]' of io.o (symbol from plugin)
collect2.exe: error: ld returned 1 exit status
no DLL was created
|
Antoine Pitrou / @pitrou: (that said, if I were you, I wouldn't bother with LTO; Arrow C++ aims to be performant without relying on LTO) |
Jonathan Keane / @jonkeane: |
Jonathan Keane / @jonkeane: |
Neal Richardson / @nealrichardson: @bkietz suggested #10905 and #10914 as possible solutions, but with LTO enabled in our Rtools40 CI job (gcc 8?), it fails differently. Note that this seems unrelated to the segfault on load on Linux under LTO, fixed in ARROW-13608 and referenced above here as well. |
The next version of R might enable LTO on Windows, i.e. R packages will be compiled with
-flto
by default. This works out of the box for most packages, but for arrow, the linker crashes as below.You can reproduce this in R on Windows for example like so:
I am not sure if this is a bug in the toolchain, or in arrow. I tried with both gcc-8.3.0 and gcc-9.3.0, and the result is the same. I did find this issue in another project which suggests to enable
INTERPROCEDURAL_OPTIMIZATION
in cmake, when mixing lto code with non-lto code (which is the case when we only build the r bindings with lto, but not the c++ library).Reporter: Jeroen / @jeroen
PRs and other links:
Note: This issue was originally created as ARROW-9616. Please see the migration documentation for further details.
The text was updated successfully, but these errors were encountered: