>From: owner-openssl-us...@openssl.org On Behalf Of James Burton
>Sent: Tuesday, 18 September, 2012 15:15

>Can you tell me what I am doing wrong , I am build a window application (
.exe )
>and I got this error:
>ign>cl.exe sign.c 
>Microsoft (R) C/C++ Optimizing Compiler Version 17.00.50727.1 for x64 
>Copyright (C) Microsoft Corporation.  All rights reserved. 
>
>sign.c 
>Microsoft (R) Incremental Linker Version 11.00.50727.1 
>Copyright (C) Microsoft Corporation.  All rights reserved. 
>       
>/out:sign.exe 
>sign.obj 
>sign.obj : error LNK2019: unresolved external symbol EVP_DigestUpdate
referenced 
<snip more>
>sign.exe : fatal error LNK1120: 11 unresolved externals 

In order to use any C library, you must tell the linker about it.
In some cases, including MSVC++ TTBOMK, you can get the compiler 
to tell the linker for you; other cases you must do it yourself.
For the C standard-library in MSVC++ (LIBC* or MSVCR*) the compiler 
actually hides this in the .obj file(s) and you don't see it.

Since your compiler (cl) seemingly found the openssl includes, you 
apparently have INCLUDEPATH set correctly. If you also have LIBPATH 
set correctly, putting the bare library name(s) on the cl command 
line (after the name of all C source files to be compiled and any 
separate object files to be linked) should be enough.

For a Windows build of OpenSSL the library names are canonically 
ssleay32.lib and libeay32.lib; for the routines referenced by this 
program you only need libeay. For a program using only SSL_* routines 
if dynamically linked you need only ssleay32.lib; for dynamic linking 
the .lib is only an "import" library that causes the real library in 
the .dll to be loaded at runtime, when both .dll's must be in the DLL 
search order, which once upon a time was just dot and PATH, but MS 
has been changing it as a result of various dll-planting attacks 
and I am not confident what it is now except that almost certainly 
%windir%\system32 still works (changing that would break far too much.
For static linking of SSL_* you need ssleay and libeay in that order.

PS- I assume you know openssl commandline already provides a good deal 
of cert-signing functionality in the 'ca', 'x509', and 'req' utilities.
If one of these does what you want, you don't need to write your own 
program, unless you want to.


______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    openssl-users@openssl.org
Automated List Manager                           majord...@openssl.org

Reply via email to