Ticket #628 (closed bug: fixed)

Opened 5 years ago

Last modified 4 years ago

Win64 build fails with 64-bit CL

Reported by: whiteknight Owned by:
Priority: normal Milestone:
Component: build Version: 1.1.0
Severity: medium Keywords: win64
Cc: Language:
Patch status: Platform: other

Description (last modified by whiteknight) (diff)

A related issue to mention first: A lot of compilers don't support 64-bit windows. So all builds on Win64 that use mingw or gcc are actually building 32-bit binarys. I think this explains, in part, why there are so few Win64 reports coming through on smolder. At the moment the only good, free 64-bit compiler for Windows that I could find is the Microsoft SDK, v14. I haven't looked into the intel compiler yet, so that may be a possibility.

Some issues:

  • With SDK 14, configure fails in detecting the compiler. To get around that we need to add "--linkflags='bufferoverflowU.lib'" to configure to make sure we link with the buffer overflow prevention libraries.
  • Build fails because sal.h cannot be found. Apparently this library is included in earlier MSVC releases, but it does no appear to be in v14. I don't know when it was removed.

Build fails otherwise for a variety of reasons that I can't debug tonight. I'm including the output of configure and make.

Attachments

configurelog.txt Download (53.7 KB) - added by whiteknight 5 years ago.
buildlog.txt Download (238.9 KB) - added by whiteknight 5 years ago.

Change History

Changed 5 years ago by whiteknight

Changed 5 years ago by whiteknight

in reply to: ↑ description   Changed 5 years ago by jkeenan

Replying to whiteknight:

1) With SDK 14, configure fails in detecting the compiler. To get around that we need to add "--linkflags='bufferoverflowU.lib'" to configure to make sure we link with the buffer overflow prevention libraries.

Can you provide the specific form of Configure.pl you used (i.e., all command-line arguments)? I'm wondering how all those ccflags values came about.

Also, what is the cl command we see in several of the config steps?

I'm amazed that with all those warnings being thrown, none of your config steps failed outright (as evidence by absence of listing of failed steps at end of configuration).

Thanks for the report.

kid51

  Changed 5 years ago by whiteknight

cl is the microsoft C compiler. In this case, it's the 64-bit, version 14.00. Here is the version of Configure.pl that I used:

perl Configure.pl --ccflags="/GS-"

There was one problem with this, configure converted this flag to "\GS-" in the makefile and I had to correct that manually. Compilation goes well but linking fails with this error:

   Creating library libparrot.lib and object libparrot.exp
sets.obj : error LNK2001: unresolved external symbol _iob
debug.obj : error LNK2001: unresolved external symbol _iob
imclexer.obj : error LNK2001: unresolved external symbol _iob
main.obj : error LNK2001: unresolved external symbol _iob
symreg.obj : error LNK2001: unresolved external symbol _iob
instructions.obj : error LNK2001: unresolved external symbol _iob
socket_win32.obj : error LNK2001: unresolved external symbol _iob
continuation.obj : error LNK2001: unresolved external symbol _iob
filehandle.obj : error LNK2001: unresolved external symbol _iob
imcparser.obj : error LNK2001: unresolved external symbol _iob
thread.obj : error LNK2001: unresolved external symbol _iob
alloc_resources.obj : error LNK2001: unresolved external symbol _iob
api.obj : error LNK2001: unresolved external symbol _iob
win32.obj : error LNK2001: unresolved external symbol _iob
api.obj : error LNK2001: unresolved external symbol _iob
packfile.obj : error LNK2001: unresolved external symbol _iob
packout.obj : error LNK2001: unresolved external symbol _iob
sub.obj : error LNK2001: unresolved external symbol _iob
events.obj : error LNK2001: unresolved external symbol _iob
exceptions.obj : error LNK2001: unresolved external symbol _iob
extend.obj : error LNK2001: unresolved external symbol _iob
alloc_register.obj : error LNK2001: unresolved external symbol _iob
core_ops.obj : error LNK2001: unresolved external symbol _iob
core_ops_switch.obj : error LNK2001: unresolved external symbol _iob
debug.obj : error LNK2001: unresolved external symbol _iob
embed.obj : error LNK2001: unresolved external symbol _iob
platform.obj : error LNK2019: unresolved external symbol _time32 referenced in f
unction Parrot_intval_time
env.obj : error LNK2001: unresolved external symbol _environ
libparrot.dll : fatal error LNK1120: 3 unresolved externals
NMAKE : fatal error U1077: 'link' : return code '0x460'
Stop.

So I'm going to try to hunt those issues down tonight.

  Changed 5 years ago by jkeenan

  • component changed from none to build

  Changed 5 years ago by whiteknight

  • description modified (diff)

  Changed 4 years ago by whiteknight

  • status changed from new to closed
  • resolution set to fixed

This is no longer an issue, I am regularly able to build and test on Win64 with the 64-bit compiler.

Note: See TracTickets for help on using tickets.