The parrot needs help, hopefully before tomorrow's release. There are two issues with linking against libparrot.dll on win32:
1. It refuses to export the "_PMCNULL" symbol (the PMCNULL global variable defined at the top of src/pmc.c), and thus, embedders cannot use the PMC_IS_NULL macro. This causes t/src/compiler.t to fail. Jerry added a workaround in r20641, declaring a local variable PMCNULL within the test code, to get it to pass. Unfortunately, this workaround causes Darwin to fail with the message "ld: multiple definitions of symbol _PMCNULL". 2. The filenames written by Configure.pl are wrong. This causes the linker command line to get the wrong library-name. It looks like this: # 'link -nologo -nodefaultlib -debug -machine:x86 -debug t\src\string_3.obj src\parrot_config.obj -out:t\src\string_3.exe -Lblib\lib libparrot$(A) kernel32.lib ws2_32.lib msvcrt.lib oldnames.lib' failed with exit code 80 # LINK : fatal error LNK1104: cannot open file 'libparrot$(A).obj' The variable $(A) is not expanded properly in the win32 shell. Quoth the Jerry: [18:30] <@particle> with gcc, you do "-lparrot" to find the library [18:31] <@particle> on win32, you do "libparrot.lib" [18:31] <@particle> in Parrot::Config, it's stored as "libparrot$(A)" [18:31] <@particle> during make, that evaluates to "libparrot.lib" [18:31] <@particle> but not in the shell, which is where that value is being used [18:31] <@particle> 2 ways to fix [18:32] <@particle> 1: put something in Parrot::Config that has what win32 needs [18:32] <@particle> 2: make a function available in Parrot::Config that resolves the variables, and call the func Once these two issues are resolved, the extra PMCNULL variables should be removed from t/src/compiler.t, which will make Darwin happy too. :) Please help! I'm clueless about win32... Mark