# New Ticket Created by "Tim Heckman"
# Please include the string: [perl #58704]
# in the subject line of all future correspondence about this issue.
# <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=58704 >
Output of prove -v t\src\compiler.t is attached.
The generated linker command is incorrect. The /L option doesn't work
with the Microsoft linker
link -nologo -nodefaultlib -debug -machine:x86 -debug
t/src/compiler_2.obj src\parrot_config.obj -out:t\src\compiler_2.exe
-Lblib\lib libparrot.lib kernel32.lib ws2_32.lib msvcrt.lib oldnames.lib
But, if I run this command using the documented linker option of
/LIBPATH it *still* fails.
link -nologo -nodefaultlib -debug -machine:x86 -debug
t/src/compiler_2.obj src\parrot_config.obj -out:t\src\compiler_2.exe
/LIBPATH:blib\lib libparrot.lib kernel32.lib ws2_32.lib msvcrt.lib
oldnames.lib
The only way I've been able to make this command line work is like this:
link -nologo -nodefaultlib -debug -machine:x86 -debug
t/src/compiler_2.obj src\parrot_config.obj -out:t\src\compiler_2.exe
blib\lib\libparrot.lib kernel32.lib ws2_32.lib msvcrt.lib oldnames.lib
I am not sure why this is. C and C++ are not my areas of expertise, so I
may be doing something wrong here. I have tried it with the Visual
Studio tools for both 2005 (professional edition) and 2008 (express
edition) with the same results.
It looks like this would require a change to lib\Parrot\Test.pm to emit
a Visual Studio-specific linker command line.
This has been turning up in the Smolder reports since early August. See
for example
http://smolder.plusthree.com/app/public_projects/report_details/5249
The GCC toolchain on Win32 does not have these failures. See
http://smolder.plusthree.com/app/public_projects/report_details/5251
--Tim
t/src/compiler....
1..6
ok 1 # SKIP compreg disabled/imcc_compile_pir() not exported
# 'link -nologo -nodefaultlib -debug -machine:x86 -debug
t/src/compiler_2.obj src\parrot_config.obj -out:t\src\compiler_2.exe
-Lblib\lib libparrot.lib kernel32.lib ws2_32.lib msvcrt.lib oldnames.lib'
failed with exit code 96
# Failed to build 't\src\compiler_2.exe': LINK : warning LNK4044: unrecognized
option '/Lblib\lib'; ignored
# compiler_2.obj : error LNK2001: unresolved external symbol _PMCNULL
# t\src\compiler_2.exe : fatal error LNK1120: 1 unresolved externals
# Failed test 'Parrot Compile API Single call'
# at t/src/compiler.t line 112.
not ok 2 - Parrot Compile API Single call
# 'link -nologo -nodefaultlib -debug -machine:x86 -debug
t/src/compiler_3.obj src\parrot_config.obj -out:t\src\compiler_3.exe
-Lblib\lib libparrot.lib kernel32.lib ws2_32.lib msvcrt.lib oldnames.lib'
failed with exit code 96
# Failed to build 't\src\compiler_3.exe': LINK : warning LNK4044: unrecognized
option '/Lblib\lib'; ignored
# compiler_3.obj : error LNK2001: unresolved external symbol _PMCNULL
# t\src\compiler_3.exe : fatal error LNK1120: 1 unresolved externals
# Failed test 'Parrot Compile API Multiple Calls'
# at t/src/compiler.t line 194.
not ok 3 - Parrot Compile API Multiple Calls
# 'link -nologo -nodefaultlib -debug -machine:x86 -debug
t/src/compiler_4.obj src\parrot_config.obj -out:t\src\compiler_4.exe
-Lblib\lib libparrot.lib kernel32.lib ws2_32.lib msvcrt.lib oldnames.lib'
failed with exit code 96
# Failed to build 't\src\compiler_4.exe': LINK : warning LNK4044: unrecognized
option '/Lblib\lib'; ignored
# compiler_4.obj : error LNK2001: unresolved external symbol _PMCNULL
# t\src\compiler_4.exe : fatal error LNK1120: 1 unresolved externals
# Failed test 'Parrot Compile API Multiple 1st bad PIR'
# at t/src/compiler.t line 287.
not ok 4 - Parrot Compile API Multiple 1st bad PIR
# 'link -nologo -nodefaultlib -debug -machine:x86 -debug
t/src/compiler_5.obj src\parrot_config.obj -out:t\src\compiler_5.exe
-Lblib\lib libparrot.lib kernel32.lib ws2_32.lib msvcrt.lib oldnames.lib'
failed with exit code 96
# Failed to build 't\src\compiler_5.exe': LINK : warning LNK4044: unrecognized
option '/Lblib\lib'; ignored
# compiler_5.obj : error LNK2001: unresolved external symbol _PMCNULL
# t\src\compiler_5.exe : fatal error LNK1120: 1 unresolved externals
# Failed test 'Parrot Compile API Multiple 2nd bad PIR'
# at t/src/compiler.t line 380.
not ok 5 - Parrot Compile API Multiple 2nd bad PIR
# 'link -nologo -nodefaultlib -debug -machine:x86 -debug
t/src/compiler_6.obj src\parrot_config.obj -out:t\src\compiler_6.exe
-Lblib\lib libparrot.lib kernel32.lib ws2_32.lib msvcrt.lib oldnames.lib'
failed with exit code 96
# Failed to build 't\src\compiler_6.exe': LINK : warning LNK4044: unrecognized
option '/Lblib\lib'; ignored
# compiler_6.obj : error LNK2001: unresolved external symbol _PMCNULL
# t\src\compiler_6.exe : fatal error LNK1120: 1 unresolved externals
# Failed test 'Parrot Compile API Multiple bad PIR'
# at t/src/compiler.t line 472.
# Looks like you failed 5 tests of 6.
not ok 6 - Parrot Compile API Multiple bad PIR
Dubious, test returned 5 (wstat 1280, 0x500)
Failed 5/6 subtests
(less 1 skipped subtest: 0 okay)
Test Summary Report
-------------------
t/src/compiler (Wstat: 1280 Tests: 6 Failed: 5)
Failed tests: 2-6
Non-zero exit status: 5
Files=1, Tests=6, 3 wallclock secs ( 0.00 usr + 0.02 sys = 0.02 CPU)
Result: FAIL