Win32-OpenSSH icon indicating copy to clipboard operation
Win32-OpenSSH copied to clipboard

Zlib fails to link with Whole Program Optimization enabled

Open TobyShaw opened this issue 1 year ago • 1 comments
trafficstars

Prerequisites

  • [X] Write a descriptive title.
  • [X] Make sure you are able to repro it on the latest version
  • [X] Search the existing issues.

Steps to reproduce

There's a strong possibility that I'm doing something wrong here with my VS setup. That said, I believe I've faithfully followed the instructions here: https://github.com/PowerShell/Win32-OpenSSH/wiki/Building-OpenSSH-for-Windows-(using-LibreSSL-crypto).

Relevant versions:

Microsoft Visual Studio Enterprise 2022 Version 17.8.0 VisualStudio.17.Release/17.8.0+34309.116 Microsoft .NET Framework Version 4.8.09032

Visual C++ 2022 00482-20704-71775-AA324 Microsoft Visual C++ 2022

Despite zlib and OpenSSH both referencing PlatformToolset v143, I get a link error with Whole Program Optimization enabled:

Error C1047 The object or library file '...\ZLib\bin\x64\zlib.lib' was created by a different version of the compiler than other objects like 'x64\Release\ssh\clientloop.obj'; rebuild all objects and libraries with the same compiler ssh

The error goes away if I disable this setting.

Expected behavior

It builds

Actual behavior

I get the error:
> Error	C1047	The object or library file '...\ZLib\bin\x64\zlib.lib' was created by a different version of the compiler than other objects like 'x64\Release\ssh\clientloop.obj'; rebuild all objects and libraries with the same compiler	ssh

Error details

No response

Environment data

n/a

Version

9.4.0.0-p1

Visuals

No response

TobyShaw avatar Nov 27 '23 17:11 TobyShaw

You're not doing anything wrong - we just started seeing this on our CI as well - thanks for opening an issue!

Since ZLib and OpenSSH are built with optimizations, Visual Studio requires that both are built with the same compiler version (major and minor, per https://learn.microsoft.com/en-us/cpp/error-messages/compiler-errors-1/fatal-error-c1047?view=msvc-170). PowerShell/ZLib was compiled with version 17.7.

Other temporary workarounds besides what you already mentioned:

  1. Compile OpenSSH with Visual Studio 17.7.
  2. Build ZLib with Visual Studio 17.8.

We are working on a more permanent solution.

tgauth avatar Nov 27 '23 18:11 tgauth