Fix windows builds - link error
joanibal opened this issue · 3 comments
joanibal commented
On Windows the build repeatedly fails at the linking stage with the following error.
"gfortran" -o libavl.cp39-win_amd64.pyd libavl.cp39-win_amd64.pyd.p/meson-generated_.._libavlmodule.c.obj libavl.cp39-win_amd64.pyd.p/meson-generated_.._libavl-f2pywrappers.f.obj libavl.cp39-win_amd64.pyd.p/src_aero.f.obj libavl.cp39-win_amd64.pyd.p/src_aic.f.obj libavl.cp39-win_amd64.pyd.p/src_ainput.f.obj libavl.cp39-win_amd64.pyd.p/src_airutil.f.obj libavl.cp39-win_amd64.pyd.p/src_amake.f.obj libavl.cp39-win_amd64.pyd.p/src_amass.f.obj libavl.cp39-win_amd64.pyd.p/src_amode.f.obj libavl.cp39-win_amd64.pyd.p/src_aoper.f.obj libavl.cp39-win_amd64.pyd.p/src_aoutput.f.obj libavl.cp39-win_amd64.pyd.p/src_asetup.f.obj libavl.cp39-win_amd64.pyd.p/src_atpforc.f.obj libavl.cp39-win_amd64.pyd.p/src_atrim.f.obj libavl.cp39-win_amd64.pyd.p/src_autil.f.obj libavl.cp39-win_amd64.pyd.p/src_avl.f.obj libavl.cp39-win_amd64.pyd.p/src_cdcl.f.obj libavl.cp39-win_amd64.pyd.p/src_getvm.f.obj libavl.cp39-win_amd64.pyd.p/src_hidden.f.obj libavl.cp39-win_amd64.pyd.p/src_matrix-lapackdp.f.obj libavl.cp39-win_amd64.pyd.p/src_second.f.obj libavl.cp39-win_amd64.pyd.p/src_sgutil.f.obj libavl.cp39-win_amd64.pyd.p/src_spline.f.obj libavl.cp39-win_amd64.pyd.p/src_userio.f.obj libavl.cp39-win_amd64.pyd.p/src_eispack.f.obj libavl.cp39-win_amd64.pyd.p/306a480927d86681adc867cd3f47a3309803b56d_.._.._f2py_src_fortranobject.c.obj "-Lc:/rtools40/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0" "-LC:/rtools40/ucrt64/lib/gcc/x86_64-w64-mingw32/10.3.0" "-Lc:/rtools40/ucrt64/bin/../lib/gcc" "-LC:/rtools40/ucrt64/lib/gcc" "-Lc:/rtools40/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/lib/../lib" "-LC:/rtools40/ucrt64/x86_64-w64-mingw32/lib" "-Lc:/rtools40/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../lib" "-LC:/rtools40/ucrt64/lib" "-Lc:/rtools40/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/lib" "-Lc:/rtools40/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../.." "-Wl,--allow-shlib-undefined" "-shared" "-Wl,--start-group" "-Wl,--out-implib=libavl.cp39-win_amd64.dll.a" "-lucrt" "-static" "lib_fortranobject.a" "-mcmodel=medium" "c:/opt/64/lib/libopenblas_v0.3.20-571-g3dec11c6-gcc_10_3_0.dll.a" "-defaultlib:advapi32" "c:/rtools40/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/libgfortran.a" "-defaultlib:advapi32" "C:\Users\runneradmin\AppData\Local\pypa\cibuildwheel\Cache\nuget-cpython\python.3.9.13\tools\python39.dll" "-lgfortran" "-lm" "-Wl,--end-group"
c:/rtools40/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/lib/../lib/dllcrt2.o: in function `_CRT_INIT':
D:/a/rtools-testing/rtools-testing/mingw-w64-crt-git/src/mingw-w64/mingw-w64-crt/crt/crtdll.c:122:(.text+0x4d): relocation truncated to fit: IMAGE_REL_AMD64_REL32 against symbol `__imp_Sleep' defined in .idata$5 section in c:/rtools40/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/lib/../lib\libkernel32.a(dqoks01409.o)
D:/a/rtools-testing/rtools-testing/mingw-w64-crt-git/src/mingw-w64/mingw-w64-crt/crt/crtdll.c:90:(.text+0xc2): relocation truncated to fit: IMAGE_REL_AMD64_REL32 against symbol `__imp_Sleep' defined in .idata$5 section in c:/rtools40/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/lib/../lib\libkernel32.a(dqoks01409.o)
libavl.cp39-win_amd64.pyd.p/meson-generated_.._libavlmodule.c.obj:libavlmodule.c:(.text+0x17ef): relocation truncated to fit: IMAGE_REL_AMD64_REL32 against symbol `__imp_PyArg_ParseTupleAndKeywords' defined in .idata$5 section in d000001.o
libavl.cp39-win_amd64.pyd.p/meson-generated_.._libavlmodule.c.obj:libavlmodule.c:(.text+0x17fb): relocation truncated to fit: IMAGE_REL_AMD64_REL32 against symbol `__imp_PyErr_Occurred' defined in .idata$5 section in d000014.o
libavl.cp39-win_amd64.pyd.p/meson-generated_.._libavlmodule.c.obj:libavlmodule.c:(.text+0x1831): relocation truncated to fit: IMAGE_REL_AMD64_REL32 against symbol `__imp_Py_BuildValue' defined in .idata$5 section in d000045.o
libavl.cp39-win_amd64.pyd.p/meson-generated_.._libavlmodule.c.obj:libavlmodule.c:(.text+0x187f): relocation truncated to fit: IMAGE_REL_AMD64_REL32 against symbol `__imp_PyArg_ParseTupleAndKeywords' defined in .idata$5 section in d000001.o
libavl.cp39-win_amd64.pyd.p/meson-generated_.._libavlmodule.c.obj:libavlmodule.c:(.text+0x188b): relocation truncated to fit: IMAGE_REL_AMD64_REL32 against symbol `__imp_PyErr_Occurred' defined in .idata$5 section in d000014.o
libavl.cp39-win_amd64.pyd.p/meson-generated_.._libavlmodule.c.obj:libavlmodule.c:(.text+0x18c1): relocation truncated to fit: IMAGE_REL_AMD64_REL32 against symbol `__imp_Py_BuildValue' defined in .idata$5 section in d000045.o
libavl.cp39-win_amd64.pyd.p/meson-generated_.._libavlmodule.c.obj:libavlmodule.c:(.text+0x190f): relocation truncated to fit: IMAGE_REL_AMD64_REL32 against symbol `__imp_PyArg_ParseTupleAndKeywords' defined in .idata$5 section in d000001.o
libavl.cp39-win_amd64.pyd.p/meson-generated_.._libavlmodule.c.obj:libavlmodule.c:(.text+0x191b): relocation truncated to fit: IMAGE_REL_AMD64_REL32 against symbol `__imp_PyErr_Occurred' defined in .idata$5 section in d000014.o
libavl.cp39-win_amd64.pyd.p/meson-generated_.._libavlmodule.c.obj:libavlmodule.c:(.text+0x1951): additional relocation overflows omitted from the output
collect2.exe: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.
INFO: autodetecting backend as ninja
INFO: calculating backend command to run: C:\Users\runneradmin\AppData\Local\Temp\pip-build-env-r5a546wj\overlay\Scripts\ninja.EXE
error: subprocess-exited-with-error
Based on this stack overflow post this issue is related to translating 64 bit memory address to 32 bit addresses.
The linker relocates data in the .o
based on its new memory address in the linked program.
A similar operation (R_X86_64_PC32) occurs in the linux .o
files so the operation itself may not be the issue.
I tried..
- additional linking flags
- '-mcmodel=medium'
- '-Wl,--image-base,0x10000000'
- additional compiler args
- '-fomit-frame-pointer' based on AVL make file
- '-mcmodel=medium'
So possible next steps
- compile AVL by itself on Windows using the included make file
- create a windows virtual machine on your laptop
- interactive debugging of the failed build using ssh (action here)