转载自:http://developer.covenanteyes.com/building-openssl-for-visual-studio/
Building OpenSSL for Visual Studio on Windows is mostly straight-forward, but it has some quirks. I’ll document the results of my wrestling here so that future attempts will be less painful.
What you need
You need to install…
Setting up for the build
Unzip3 the OpenSSL source code into two different folders, one for the 32-bit build and one for the 64-bit build4. So, for example, you might end up with C:\openssl-src-32
and C:\openssl-src-64
.
Building the 32-bit static libraries
- Open the Visual Studio Command Prompt (2010)5.
cd
to your OpenSSL source folder for 32-bit (e.g. cd C:\openssl-src-32
).
- Run the following: 6
perl Configure VC-WIN32 --prefix=C:\Build-OpenSSL-VC-32
ms\do_ms
nmake -f ms\nt.mak
nmake -f ms\nt.mak install
Your outputs will be in C:\Build-OpenSSL-VC-32
.
Building the 32-bit static libraries with debug symbols
These steps will embed the debug symbols directly into the .lib
files. Don’t expect to see any .pdb
files.
- Open the Visual Studio Command Prompt (2010).
cd
to your OpenSSL source folder for 32-bit (e.g. cd C:\openssl-src-32
).
- Run the following:
perl Configure debug-VC-WIN32 --prefix=C:\Build-OpenSSL-VC-32-dbg
ms\do_ms
- In a text editor (like Notepad), open
ms\nt.mak
and replace all occurrences of /Zi
with /Z7
. There should be three replacements.7
- Run the following:
nmake -f ms\nt.mak
nmake -f ms\nt.mak install
Your outputs will be in C:\Build-OpenSSL-VC-32-dbg
. Make sure you rename them to something likelibeay32-debug.lib
and ssleay32-debug.lib
.
Building the 64-bit static libraries
- Open the Visual Studio x64 Win64 Command Prompt (2010) (in the Start menu).
cd
to your OpenSSL source folder for 64-bit (e.g. cd C:\openssl-src-64
).
- Run the following:
perl Configure VC-WIN64A --prefix=C:\Build-OpenSSL-VC-64
ms\do_win64a
nmake -f ms\nt.mak
nmake -f ms\nt.mak install
Your outputs will be in C:\Build-OpenSSL-VC-64
.
Note: The outputs of the 64-bit build are still named libeay32.lib
and ssleay32.lib
. You’ll have to rename them more sensibly yourself.
Building the 64-bit static libraries with debug symbols
These steps will embed the debug symbols directly into the .lib
files. Don’t expect to see any .pdb
files.
- Open the Visual Studio x64 Win64 Command Prompt (2010).
cd
to your OpenSSL source folder for 64-bit (e.g. cd C:\openssl-src-64
).
- Run the following:
perl Configure debug-VC-WIN64A --prefix=C:\Build-OpenSSL-VC-64-dbg
ms\do_win64a
- In a text editor (like Notepad), open
ms\nt.mak
and replace all occurrences of /Zi
with /Z7
except on the line starting with ASM
. There should be two replacements. 8
- Run the following:
nmake -f ms\nt.mak
nmake -f ms\nt.mak install
Your outputs will be in C:\Build-OpenSSL-VC-64-dbg
. Make sure you rename them to something likelibeay64-debug.lib
and ssleay64-debug.lib
.
What not to do
I tried every method under the sun to get a Windows build of OpenSSL that would link against Visual Studio projects. I learned a great deal along the way. Here’s what I learned not to do:
- Don’t blindly follow the Windows 32-bit/64-bit installation instructions provided in the OpenSSL source folder. Get guidance online.
- Don’t build OpenSSL in Cygwin. It’s easy. It won’t link against Visual Studio.
- Don’t build OpenSSL in MSYS or MinGW. It’s hard. It won’t link against Visual Studio.
- Don’t try to use NASM like the Windows installation instructions mention. It’s not necessary for Visual Studio builds. (It only supports 32-bit anyway.)
- Strawberry Perl doesn’t always work in these weird configurations. ActivePerl seemed more stable.
- Don’t try to build 32-bit and 64-bit OpenSSL in the same folder. The first build will leave artifacts that will mess up the second build. (Running a clean isn’t enough, apparently.)
- Don’t try to build 32-bit OpenSSL inside of Visual Studio’s 64-bit command prompt and vice versa. It doesn’t work.
References
These were very helpful places:
Footnotes:
1. Strawberry Perl has been less reliable historically, but I see the comments for success stories.
2. OpenSSL version 1.0.1c was the latest at the time of writing.
3.
7-zip is good for unzipping
.tar.gz
files on Windows. It’s a two-step process.
4. OpenSSL’s build scripts are not clever enough to handle two different platform builds in sequence. Separate platform builds must start from scratch.
5. You can find it somewhere in the
Start menu.
6. Using
ms\\ntdll.mak
will build the shared library instead.
7. The
/Zi
option works, but it’s hard to find the right
.pdb
file without specifying more options. For the sake of simplicity, the
/Z7
option just embeds all the debug symbols into the
.lib
files. Read more
here.
8. For the 64-bit build, Visual Studio uses MASM (
ml64.exe
) to compile assembly code. According to
MASM’s documentation, the
/Z7
option is not supported.