Open
Description
Background
Trying to reproduce #55900.
I'm using gcc 14 in MSYS2 (mingw32), and build from source with master fe5ed17.
Then I got a undef error from ld
: "undefined reference to `_initterm_e'"
Details
$ make -j16
echo '@"%~dp0/'"$(echo 'usr/bin/julia.exe')"'" %*' | tr / '\\' > /d/jl/julia/julia.bat
chmod a+x /d/jl/julia/julia.bat
LINK usr/lib/julia/sys.dll
D:/env/msys64/mingw32/bin/../lib/gcc/i686-w64-mingw32/14.2.0/../../../../i686-w64-mingw32/bin/ld.exe: D:/env/msys64/mingw32/bin/../lib/gcc/i686-w64-mingw32/14.2.0/../../../../lib/dllcrt2.o: in function `CRT_INIT@12':
C:/M/B/src/mingw-w64/mingw-w64-crt/crt/crtdll.c:100:(.text+0x17a): undefined reference to `_initterm_e'
collect2.exe: error: ld returned 1 exit status
make[1]: *** [sysimage.mk:18: /d/jl/julia/usr/lib/julia/sys.dll] Error 1
make: *** [Makefile:120: julia-sysimg-release] Error 2
I know julia carries a specific version of crt.
Check the exported symbols:
$ nm -g /d/jl/julia/usr/lib/gcc/i686-w64-mingw32/13/libmsvcrt.a | grep initterm
00000000 I __imp___initterm
00000000 T __initterm
$ nm -g /mingw32/lib/libmsvcrt.a | grep initterm
lib32_libmsvcrt_extra_a-_initterm_e.o:
00000000 D __imp___initterm_e
00000000 T __initterm_e
00000000 I __imp___initterm
00000000 T __initterm
$ gcc --version
gcc.exe (Rev2, Built by MSYS2 project) 14.2.0
$ ld --version
GNU ld (GNU Binutils) 2.43.1
This ld error is easily fixed by not using the libraries carried by CSL.
But it also brought a problem to my attention.
Problem
On Windows, we ship crt from GCC 13.
Lines 107 to 115 in 006f19c
And we are using GCC 14 to build julia x64 version:
- Docker: juliapackaging/package-windows-x86_64:v7.10
- gcc version 14.2.0 (Rev1, Built by MSYS2 project)
- GNU ld (GNU Binutils) 2.43
- Buildkite Job:
build x86_64-w64-mingw32
https://buildkite.com/julialang/julia-master/builds/42913#0193b141-b435-4f5c-901f-b08890a33337/700-710
Using GCC 12 to build julia x86 version:
- Docker: juliapackaging/package-windows-i686:v7.10
- gcc version 12.2.0 (i686-posix-sjlj-rev0, Built by MinGW-W64 project)
- GNU ld (GNU Binutils) 2.38
- Buildkite Job:
build i686-w64-mingw32
https://buildkite.com/julialang/julia-master/builds/42913#0193b141-b8f7-42d8-ba40-4485e8bb901e/701-711
I'm wondering if the old gcc + new crt libraries are causing some problems.
Or if this is related to the stack trace error in #55900.