-
@thoni56, I've tried to build the repo under Win 10 using MSYS2 + MinGW-32, but only managed to compile part of the project. IRC, you mention somewhere that it only builds using CygWin. Pre-Compiled Win BinariesSince I'd like to be able to access all the ToolMaker binaries for the ALAN source project, I was hoping to manage to build it with MSYS2 and also wondering whether you could either:
As for the latter, it could automate adding precompiled binaries for other OSs too, and include them in each tagged GitHub release. Since the project is not actually following a versioned-releases strategy, and because it includes various tools, you could use dates in the This might be a better versioning strategy, since the goal would be just to provide up-to-date binaries which each release, and because SemVer tags are not applicable to the whole project, besides not being practical in this case. MSYS2/MinGW-32 FailureAny idea why the build fails under MSYS2? The only binaries that compile successfully are:
These tools seems to work fine — at least, I can query them via The Make log is rather long and not entirely clear, due to the many GCC warnings that clutter it. I've pasted it below, in a foldable section (so it doesn't take the whole page). From what I gather, it fails to build the pmk tool:
but I'm not sure what the Since Make aborts at the above error, I have no idea if there are other problems with the remaining tools (I don't even know how many binaries I should expect on a successful build). Maybe if we manage to fix the above problem the rest of the Makefile works fine under MSYS2, or maybe there are more problems. I haven't yet tried to build other sub-folders/tool using their Makefiles, but I will try to. MSYS LogError log trying to build the project under Windows 10 x64, using MSYS2 and MinGW-32. MSYS2 Error Log (click to unfold)``` P.K.Dick@RANXEROX MINGW32 /d/ToolMaker/src $ make cd tmk; make all make[1]: Entering directory '/d/ToolMaker/src/tmk' Rebuilding for mingw32 rm: cannot remove '*.o': No such file or directory rm: cannot remove '*.a': No such file or directory gcc -Wall -g -DTARGETOS=\"mingw32\" -m32 -c -o tmkPaSema.o tmkPaSema.c gcc -Wall -g -DTARGETOS=\"mingw32\" -m32 -c -o tmkParse.o tmkParse.c gcc -Wall -g -DTARGETOS=\"mingw32\" -m32 -c -o tmkErr.o tmkErr.c gcc -Wall -g -DTARGETOS=\"mingw32\" -m32 -c -o tmkScan.o tmkScan.c gcc -Wall -g -DTARGETOS=\"mingw32\" -m32 -c -o tmkScSema.o tmkScSema.c gcc -Wall -g -DTARGETOS=\"mingw32\" -m32 -c -o tmkOpts.o tmkOpts.c gcc -Wall -g -DTARGETOS=\"mingw32\" -m32 -c -o tmkCommon.o tmkCommon.c ar r libtmk.a tmkPaSema.o tmkParse.o tmkErr.o tmkScan.o tmkScSema.o tmkOpts.o tmkCommon.o C:\tools\msys64\mingw32\bin\ar.exe: creating libtmk.a ranlib libtmk.a install -C -b Common.imp ../../lib/ansi-c make[1]: Leaving directory '/d/ToolMaker/src/tmk' cd imp; make all make[1]: Entering directory '/d/ToolMaker/src/imp' Rebuilding for mingw32 rm: cannot remove '*.o': No such file or directory rm: cannot remove '*.a': No such file or directory gcc -Wall -g -DTARGETOS=\"mingw32\" -m32 -c -o impParse.o impParse.c gcc -Wall -g -DTARGETOS=\"mingw32\" -m32 -c -o impPaSema.o impPaSema.c impPaSema.c: In function 'impPaSema': impPaSema.c:454:5: warning: 'errStr' may be used uninitialized [-Wmaybe-uninitialized] 454 | strcat(errStr, "INTEGER**IDENTIFIER"); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ : note: by argument 1 of type 'const char *' to '__builtin_strlen' declared here impPaSema.c:453:10: note: 'errStr' declared here 453 | char errStr[19]; | ^~~~~~ impPaSema.c:467:5: warning: 'errStr' may be used uninitialized [-Wmaybe-uninitialized] 467 | strcat(errStr, "INTEGER**IDENTIFIER"); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ : note: by argument 1 of type 'const char *' to '__builtin_strlen' declared here impPaSema.c:466:10: note: 'errStr' declared here 466 | char errStr[19]; | ^~~~~~ impPaSema.c:480:5: warning: 'errStr' may be used uninitialized [-Wmaybe-uninitialized] 480 | strcat(errStr, "INTEGER**IDENTIFIER"); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ : note: by argument 1 of type 'const char *' to '__builtin_strlen' declared here impPaSema.c:479:10: note: 'errStr' declared here 479 | char errStr[19]; | ^~~~~~ impPaSema.c:493:5: warning: 'errStr' may be used uninitialized [-Wmaybe-uninitialized] 493 | strcat(errStr, "INTEGER*IDENTIFIER"); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ : note: by argument 1 of type 'const char *' to '__builtin_strlen' declared here impPaSema.c:492:10: note: 'errStr' declared here 492 | char errStr[19]; | ^~~~~~ impPaSema.c:506:5: warning: 'errStr' may be used uninitialized [-Wmaybe-uninitialized] 506 | strcat(errStr, "INTEGER**IDENTIFIER"); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ : note: by argument 1 of type 'const char *' to '__builtin_strlen' declared here impPaSema.c:505:10: note: 'errStr' declared here 505 | char errStr[19]; | ^~~~~~ impPaSema.c:454:5: warning: '__builtin_memcpy' writing 20 bytes into a region of size 19 overflows the destination [-Wstringop-overflow=] 454 | strcat(errStr, "INTEGER**IDENTIFIER"); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ impPaSema.c:453:10: note: destination object 'errStr' of size 19 453 | char errStr[19]; | ^~~~~~ impPaSema.c:467:5: warning: '__builtin_memcpy' writing 20 bytes into a region of size 19 overflows the destination [-Wstringop-overflow=] 467 | strcat(errStr, "INTEGER**IDENTIFIER"); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ impPaSema.c:466:10: note: destination object 'errStr' of size 19 466 | char errStr[19]; | ^~~~~~ impPaSema.c:480:5: warning: '__builtin_memcpy' writing 20 bytes into a region of size 19 overflows the destination [-Wstringop-overflow=] 480 | strcat(errStr, "INTEGER**IDENTIFIER"); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ impPaSema.c:479:10: note: destination object 'errStr' of size 19 479 | char errStr[19]; | ^~~~~~ impPaSema.c:506:5: warning: '__builtin_memcpy' writing 20 bytes into a region of size 19 overflows the destination [-Wstringop-overflow=] 506 | strcat(errStr, "INTEGER**IDENTIFIER"); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ impPaSema.c:505:10: note: destination object 'errStr' of size 19 505 | char errStr[19]; | ^~~~~~ gcc -Wall -g -DTARGETOS=\"mingw32\" -m32 -c -o impErr.o impErr.c gcc -Wall -g -DTARGETOS=\"mingw32\" -m32 -c -o impList.o impList.c gcc -Wall -g -DTARGETOS=\"mingw32\" -m32 -c -o impScan.o impScan.c gcc -Wall -g -DTARGETOS=\"mingw32\" -m32 -c -o impScSema.o impScSema.c gcc -Wall -g -DTARGETOS=\"mingw32\" -m32 -c -o ast.o ast.c gcc -Wall -g -DTARGETOS=\"mingw32\" -m32 -c -o name.o name.c gcc -Wall -g -DTARGETOS=\"mingw32\" -m32 -c -o impMacro.o impMacro.c gcc -Wall -g -DTARGETOS=\"mingw32\" -m32 -c -o timing.o timing.c gcc -Wall -g -DTARGETOS=\"mingw32\" -m32 -c -o version.o version.c ar rv imp.a impParse.o impPaSema.o impErr.o impList.o impScan.o impScSema.o ast.o name.o impMacro.o timing.o version.o a - impParse.o a - impPaSema.o a - impErr.o a - impList.o a - impScan.o a - impScSema.o a - ast.o a - name.o a - impMacro.o a - timing.o a - version.o C:\tools\msys64\mingw32\bin\ar.exe: creating imp.a ranlib imp.a gcc -Wall -g -DTARGETOS=\"mingw32\" -m32 -c -o imp.o imp.c gcc -o imp -Wall -g -DTARGETOS=\"mingw32\" -m32 imp.o imp.a mkdir -p ../../bin install imp ../../bin/ make[1]: Leaving directory '/d/ToolMaker/src/imp' cd lmk; make all make[1]: Entering directory '/d/ToolMaker/src/lmk' Rebuilding for mingw32 rm: cannot remove '*.o': No such file or directory rm: cannot remove '*.a': No such file or directory gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o lmkPaSema.o lmkPaSema.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o lmkParse.o lmkParse.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o lmkErr.o lmkErr.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o lmkScan.o lmkScan.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o lmkScSema.o lmkScSema.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o lmkList.o lmkList.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o lmkTab.o lmkTab.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o lmk.o lmk.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o version.o version.c gcc -o lmk -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 lmkPaSema.o lmkParse.o lmkErr.o lmkScan.o lmkScSema.o lmkList.o lmkTab.o lmk.o version.o ../tmk/libtmk.a ../imp/imp.a install lmk ../../bin/ install -C -b List.imp ../../lib/ansi-c/ make[1]: Leaving directory '/d/ToolMaker/src/lmk' cd smk; make all make[1]: Entering directory '/d/ToolMaker/src/smk' Rebuilding for mingw32 rm: cannot remove '*.o': No such file or directory rm: cannot remove '*.a': No such file or directory gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o smkPaSema.o smkPaSema.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o smkScSema.o smkScSema.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o smkParse.o smkParse.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o smkErr.o smkErr.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o smkScan.o smkScan.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o smkList.o smkList.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o smk.o smk.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o token.o token.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o scanner.o scanner.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o vocabulary.o vocabulary.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o definition.o definition.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o rule.o rule.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o ast.o ast.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o lmprintf.o lmprintf.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o name.o name.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o char.o char.c char.c: In function 'charClass': char.c:180:5: warning: this 'else' clause does not guard... [-Wmisleading-indentation] 180 | else | ^~~~ char.c:182:7: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'else' 182 | if(*string==']') break; | ^~ gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o nfa.o nfa.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o lookahead.o lookahead.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o dfa.o dfa.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o map.o map.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o pack.o pack.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o write.o write.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o time.o time.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o action.o action.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o set.o set.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o screen.o screen.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o smalloc.o smalloc.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o nfas.o nfas.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o common.o common.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o version.o version.c gcc -o smk -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 smkPaSema.o smkScSema.o smkParse.o smkErr.o smkScan.o smkList.o smk.o token.o scanner.o vocabulary.o definition.o rule.o ast.o lmprintf.o name.o char.o nfa.o lookahead.o dfa.o map.o pack.o write.o time.o action.o set.o screen.o smalloc.o nfas.o common.o version.o ../tmk/libtmk.a ../imp/imp.a install smk ../../bin/ install -C -b Scan.imp ../../lib/ansi-c make[1]: Leaving directory '/d/ToolMaker/src/smk' cd pmk; make all make[1]: Entering directory '/d/ToolMaker/src/pmk' Rebuilding for mingw32 rm: cannot remove '*.o': No such file or directory rm: cannot remove '*.a': No such file or directory gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o pack.o pack.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o pmkErr.o pmkErr.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o pmkList.o pmkList.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o pmkParse.o pmkParse.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o pmkScan.o pmkScan.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o pmkPaSema.o pmkPaSema.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o pmkScSema.o pmkScSema.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o pmkSymTab.o pmkSymTab.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o pmkTab.o pmkTab.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o pwDbg.o pwDbg.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o pwGe.o pwGe.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o pwLog.o pwLog.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o pwPack.o pwPack.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o pwSymSet.o pwSymSet.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o pwsGrm.o pwsGrm.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o pwsOrd.o pwsOrd.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o pwsQueue.o pwsQueue.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o pwsWrit.o pwsWrit.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o set.o set.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o timing.o timing.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o pmk.o pmk.c gcc -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 -c -o version.o version.c gcc -o pmk -Wall -g -I../tmk -I../imp -DTARGETOS=\"mingw32\" -m32 pack.o pmkErr.o pmkList.o pmkParse.o pmkScan.o pmkPaSema.o pmkScSema.o pmkSymTab.o pmkTab.o pwDbg.o pwGe.o pwLog.o pwPack.o pwSymSet.o pwsGrm.o pwsOrd.o pwsQueue.o pwsWrit.o set.o timing.o pmk.o version.o ../tmk/libtmk.a ../imp/imp.a C:/tools/msys64/mingw32/bin/../lib/gcc/i686-w64-mingw32/11.2.0/../../../../i686-w64-mingw32/bin/ld.exe: pmkParse.o:pmkParse.c:(.bss+0x0): multiple definition of `inFiles'; pmkErr.o:pmkErr.c:(.bss+0x0): first defined here C:/tools/msys64/mingw32/bin/../lib/gcc/i686-w64-mingw32/11.2.0/../../../../i686-w64-mingw32/bin/ld.exe: pmkParse.o:pmkParse.c:(.bss+0xc): multiple definition of `code_spec'; pmkErr.o:pmkErr.c:(.bss+0xc): first defined here C:/tools/msys64/mingw32/bin/../lib/gcc/i686-w64-mingw32/11.2.0/../../../../i686-w64-mingw32/bin/ld.exe: pmkScan.o:pmkScan.c:(.bss+0x0): multiple definition of `inFiles'; pmkErr.o:pmkErr.c:(.bss+0x0): first defined here C:/tools/msys64/mingw32/bin/../lib/gcc/i686-w64-mingw32/11.2.0/../../../../i686-w64-mingw32/bin/ld.exe: pmkScan.o:pmkScan.c:(.bss+0xc): multiple definition of `code_spec'; pmkErr.o:pmkErr.c:(.bss+0xc): first defined here C:/tools/msys64/mingw32/bin/../lib/gcc/i686-w64-mingw32/11.2.0/../../../../i686-w64-mingw32/bin/ld.exe: pmkPaSema.o:pmkPaSema.c:(.bss+0x0): multiple definition of `inFiles'; pmkErr.o:pmkErr.c:(.bss+0x0): first defined here C:/tools/msys64/mingw32/bin/../lib/gcc/i686-w64-mingw32/11.2.0/../../../../i686-w64-mingw32/bin/ld.exe: pmkPaSema.o:pmkPaSema.c:(.bss+0xc): multiple definition of `code_spec'; pmkErr.o:pmkErr.c:(.bss+0xc): first defined here C:/tools/msys64/mingw32/bin/../lib/gcc/i686-w64-mingw32/11.2.0/../../../../i686-w64-mingw32/bin/ld.exe: pmkScSema.o:pmkScSema.c:(.bss+0x0): multiple definition of `inFiles'; pmkErr.o:pmkErr.c:(.bss+0x0): first defined here C:/tools/msys64/mingw32/bin/../lib/gcc/i686-w64-mingw32/11.2.0/../../../../i686-w64-mingw32/bin/ld.exe: pmkScSema.o:pmkScSema.c:(.bss+0xc): multiple definition of `code_spec'; pmkErr.o:pmkErr.c:(.bss+0xc): first defined here C:/tools/msys64/mingw32/bin/../lib/gcc/i686-w64-mingw32/11.2.0/../../../../i686-w64-mingw32/bin/ld.exe: pmkSymTab.o:pmkSymTab.c:(.bss+0x0): multiple definition of `inFiles'; pmkErr.o:pmkErr.c:(.bss+0x0): first defined here C:/tools/msys64/mingw32/bin/../lib/gcc/i686-w64-mingw32/11.2.0/../../../../i686-w64-mingw32/bin/ld.exe: pmkTab.o:pmkTab.c:(.bss+0x0): multiple definition of `inFiles'; pmkErr.o:pmkErr.c:(.bss+0x0): first defined here C:/tools/msys64/mingw32/bin/../lib/gcc/i686-w64-mingw32/11.2.0/../../../../i686-w64-mingw32/bin/ld.exe: pmkTab.o:pmkTab.c:(.bss+0xc): multiple definition of `code_spec'; pmkErr.o:pmkErr.c:(.bss+0xc): first defined here C:/tools/msys64/mingw32/bin/../lib/gcc/i686-w64-mingw32/11.2.0/../../../../i686-w64-mingw32/bin/ld.exe: pwGe.o:pwGe.c:(.bss+0x0): multiple definition of `inFiles'; pmkErr.o:pmkErr.c:(.bss+0x0): first defined here C:/tools/msys64/mingw32/bin/../lib/gcc/i686-w64-mingw32/11.2.0/../../../../i686-w64-mingw32/bin/ld.exe: pwLog.o:pwLog.c:(.bss+0x0): multiple definition of `inFiles'; pmkErr.o:pmkErr.c:(.bss+0x0): first defined here C:/tools/msys64/mingw32/bin/../lib/gcc/i686-w64-mingw32/11.2.0/../../../../i686-w64-mingw32/bin/ld.exe: pwLog.o:pwLog.c:(.bss+0xc): multiple definition of `code_spec'; pmkErr.o:pmkErr.c:(.bss+0xc): first defined here C:/tools/msys64/mingw32/bin/../lib/gcc/i686-w64-mingw32/11.2.0/../../../../i686-w64-mingw32/bin/ld.exe: pwPack.o:pwPack.c:(.bss+0x0): multiple definition of `inFiles'; pmkErr.o:pmkErr.c:(.bss+0x0): first defined here C:/tools/msys64/mingw32/bin/../lib/gcc/i686-w64-mingw32/11.2.0/../../../../i686-w64-mingw32/bin/ld.exe: pwSymSet.o:pwSymSet.c:(.bss+0x0): multiple definition of `inFiles'; pmkErr.o:pmkErr.c:(.bss+0x0): first defined here C:/tools/msys64/mingw32/bin/../lib/gcc/i686-w64-mingw32/11.2.0/../../../../i686-w64-mingw32/bin/ld.exe: pwsGrm.o:pwsGrm.c:(.bss+0x0): multiple definition of `inFiles'; pmkErr.o:pmkErr.c:(.bss+0x0): first defined here C:/tools/msys64/mingw32/bin/../lib/gcc/i686-w64-mingw32/11.2.0/../../../../i686-w64-mingw32/bin/ld.exe: pwsGrm.o:pwsGrm.c:(.bss+0xc): multiple definition of `code_spec'; pmkErr.o:pmkErr.c:(.bss+0xc): first defined here C:/tools/msys64/mingw32/bin/../lib/gcc/i686-w64-mingw32/11.2.0/../../../../i686-w64-mingw32/bin/ld.exe: pwsOrd.o:pwsOrd.c:(.bss+0x0): multiple definition of `inFiles'; pmkErr.o:pmkErr.c:(.bss+0x0): first defined here C:/tools/msys64/mingw32/bin/../lib/gcc/i686-w64-mingw32/11.2.0/../../../../i686-w64-mingw32/bin/ld.exe: pwsQueue.o:pwsQueue.c:(.bss+0x0): multiple definition of `inFiles'; pmkErr.o:pmkErr.c:(.bss+0x0): first defined here C:/tools/msys64/mingw32/bin/../lib/gcc/i686-w64-mingw32/11.2.0/../../../../i686-w64-mingw32/bin/ld.exe: pwsWrit.o:pwsWrit.c:(.bss+0x0): multiple definition of `inFiles'; pmkErr.o:pmkErr.c:(.bss+0x0): first defined here C:/tools/msys64/mingw32/bin/../lib/gcc/i686-w64-mingw32/11.2.0/../../../../i686-w64-mingw32/bin/ld.exe: pmk.o:pmk.c:(.bss+0x0): multiple definition of `inFiles'; pmkErr.o:pmkErr.c:(.bss+0x0): first defined here collect2.exe: error: ld returned 1 exit status make[1]: *** [Makefile:60: mingw32] Error 1 make[1]: Leaving directory '/d/ToolMaker/src/pmk' make: *** [Makefile:8: all] Error 2 ```Building with LLVM/Clang?Do you think that the project might build using the Clang compiler? It seems that the LLVM package contains various tools that allow code analysis to compile C project under Windows without all the cross-compatibility problems, which might allow to compile directly under Windows — but I'm not sure how this works and whether it currently handles any project or only certain features. I've installed the LLVM package because various Rust projects need it to translate C sources to Rust (e.g. headers, or even transpiling entire sources). From what I've read, Clang has developed into an excellent compiler and it's currently comparable to GCC in terms of quality results. If there's a chance that the project might build under Win OS using Clang (and other LLVM tools), without the need of the POSIX emulation layer of CygWin/MSYS2, then I think it's worth investing some energy in creating a build script for it. More Info on Project BinariesIf you could provide me with some info regarding the various binary tools generated by the project it could help me out trying to provide alternative build scripts for Windows 10 (MSYS2, or Clang/LLVM). Having a README file in each |
Beta Was this translation helpful? Give feedback.
Replies: 4 comments 13 replies
-
I'm moving this to discussions also, as it will probably be more of a conversation. Although ultimately, having binaries would be the wanted "fix". I will also add info here in a piecemeal fashion. First piece is that it some part of the suite requires 32-bit compilation, probably smk/ScannerMaker (the lexer generator). That is (has been) possible on some platforms, but as I knew how to do it on Cygwin I might have mentioned that as the "platform of choice". But I also found out how to do that on Linux (using multilib and/or mingw32). For Msys2 I think it worked at some point using a Msys Mingw32 console, because I think it used to default to Mingw32 tool suite. (And the Mys2 Mingw64 console defaulted to gcc=x86_64 toolchain.) Also see #1, for a historic data point for this. It's been a while since I used Msys2, things changes from under you ;-) and it seems that has changed (IIRC) so that now, what ever console, you need to explicitly select toolchain. So your best bet is probably to try
(The Makefiles are using But I ran in a problem with multiple declaration of a variable in BTW, |
Beta Was this translation helpful? Give feedback.
-
From reading up on the fairly un-formatted log I see that the actual problem you had was actually the same multiply defined symbols in At some point in the "near future" I'll look at the pmk-compilation linking problem and see if I can fix it. As of this moment I have no working binaries for "Windows" (Cygwin/Msys2). |
Beta Was this translation helpful? Give feedback.
-
As the root problem is the 32-bit dependency I think Unless it does not interpret the declarations in But I agree about |
Beta Was this translation helpful? Give feedback.
-
Commit 7ec2971 contains the fix in It was as I suspected |
Beta Was this translation helpful? Give feedback.
Commit 7ec2971 contains the fix in
pmk
that restores compilation on Msys2.It was as I suspected
gcc
(11) that had decided to finally enforce the interpretation of theextern
keyword, or rather the lack of it, that probably was the intention all along, but had previously allowed another interpretation.