I am trying to build the newly-released openssl (1.0.0) in a basic
MinGW environment.
I have tried both the automatic MinGW installer, which installs gcc
3.4.5 (fairly old), and a manual install of the current (not
"proposed") gcc, version 4.4.0.
The first error is 3 missing definitions in wincrypt.h. This causes
engines/e_capi.c to fail to compile. I inserted them based on
Microsoft's wincrypt.h file:
1314,1319d1313
< /* additional definitions required for e_capi.c */
<
< typedef struct _PUBKEY {
< DWORD magic ;
< DWORD bitlen ;
< } DSSPUBKEY ;
1321,1323d1314
< #define CERT_STORE_PROV_SYSTEM_A ((LPCSTR) 9)
< #define CERT_STORE_READONLY_FLAG 0x00008000
<
This makes compilation work but then openssl (.exe) fails to link
[same symptom with both the automatic MinGW install and my manual
install):
rm -f openssl.exe
shlib_target=; if [ -n "" ]; then \
shlib_target="cygwin-shared"; \
fi; \
LIBRARIES="-L.. -lssl -L.. -lcrypto" ; \
make -f ../Makefile.shared -e \
APPNAME=openssl.exe OBJECTS="openssl.o verify.o asn1pars.o
req.o dgst.o dh.o dhparam.o enc.o passwd.o gendh.o errstr.o ca.o pkcs7.o
crl2p7.o crl.o rsa.o rsautl.o dsa.o dsaparam.o ec.o ecparam.o x509.o genrsa.o
gendsa.o genpkey.o s_server.o s_client.o speed.o s_time.o apps.o s_cb.o
s_socket.o app_rand.o version.o sess_id.o ciphers.o nseq.o pkcs12.o pkcs8.o
pkey.o pkeyparam.o pkeyutl.o spkac.o smime.o cms.o rand.o engine.o ocsp.o
prime.o ts.o" \
LIBDEPS=" $LIBRARIES -lws2_32 -lgdi32 -lcrypt32" \
link_app.${shlib_target}
make[2]: Entering directory `/c/Documents and Settings/Robert
Lerche/Application Data/openssl-1.0.0/apps'
( :; LIBDEPS="${LIBDEPS:--L.. -lssl -L.. -lcrypto -lws2_32 -lgdi32
-lcrypt32}"; LDCMD="${LDCMD:-gcc}"; LDFLAGS="${LDFLAGS:--DOPENSSL_THREADS
-DDSO_WIN32 -mno-cygwin -DL_ENDIAN -DWIN32_LEAN_AND_MEAN -fomit-frame-pointer
-O3 -march=i486 -Wall -DOPENSSL_BN_ASM_PART_WORDS -DOPENSSL_IA32_SSE2
-DOPENSSL_BN_ASM_MONT -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM
-DRMD160_ASM -DAES_ASM -DWHIRLPOOL_ASM}"; LIBPATH=`for x in $LIBDEPS; do echo
$x; done | sed -e 's/^ *-L//;t' -e d | uniq`; LIBPATH=`echo $LIBPATH | sed -e
's/ /:/g'`; LD_LIBRARY_PATH=$LIBPATH:$LD_LIBRARY_PATH ${LDCMD} ${LDFLAGS} -o
${APPNAME:=openssl.exe} openssl.o verify.o asn1pars.o req.o dgst.o dh.o
dhparam.o enc.o passwd.o gendh.o errstr.o ca.o pkcs7.o crl2p7.o crl.o rsa.o
rsautl.o dsa.o dsaparam.o ec.o ecparam.o x509.o genrsa.o gendsa.o genpkey.o
s_server.o s_client.o speed.o s_time.o apps.o s_cb.o s_socket.o app_rand.o
version.o sess_id.o ciphers.o nseq.o pkcs12.o pkcs8.o pkey.o pkeyparam.o
pkeyutl.o spkac.o sm!
ime.o cms.o rand.o engine.o ocsp.o prime.o ts.o ${LIBDEPS} )
../libcrypto.a(e_capi.o):e_capi.c:(.text+0x151d): undefined reference to
`CryptEnumProvidersA'
../libcrypto.a(e_capi.o):e_capi.c:(.text+0x1606): undefined reference to
`CryptEnumProvidersA'
collect2: ld returned 1 exit status
make[2]: *** [link_app.] Error 1
make[2]: Leaving directory `/c/Documents and Settings/Robert
Lerche/Application Data/openssl-1.0.0/apps'
make[1]: *** [openssl.exe] Error 2
make[1]: Leaving directory `/c/Documents and Settings/Robert
Lerche/Application Data/openssl-1.0.0/apps'
make: *** [build_apps] Error 1
I looked around and found the symbol 'CryptEnumProvidersA' (well, a
similar symbol) in libadvapi32.a (corresponding to Windows' advapi32
library):
sh-3.1$ nm /mingw/lib/libadvapi32.a | grep CryptEnumProvidersA
00000000 T _cryptenumprovide...@24
00000000 I __imp__cryptenumprovide...@24
Here are the two gcc versions I tried:
sh-3.1$ gcc -v
Using built-in specs.
Target: mingw32
Configured with: ../gcc-4.4.0/configure
--enable-languages=c,ada,c++,fortran,java,objc,obj-c++
--disable-sjlj-exceptions --enable-shared --enable-libgcj --enable-libgomp
--with-dwarf2 --disable-win32-registry --enable-libstdcxx-debug
--enable-version-specific-runtime-libs --prefix=/mingw
--with-gmp=/mingw/src/gmp/root --with-mpfr=/mingw/src/mpfr/root --build=mingw32
Thread model: win32
gcc version 4.4.0 (GCC)
...
sh-3.1$ gcc -v
Reading specs from c:/mingw/bin/../lib/gcc/mingw32/3.4.5/specs
Configured with: ../gcc-3.4.5-20060117-3/configure --with-gcc --with-gnu-ld
--with-gnu-as --host=mingw32 --target=mingw32 --prefix=/mingw --enable-threads
--disable-nls --enable-languages=c,c++,f77,ada,objc,java
--disable-win32-registry --disable-shared --enable-sjlj-exceptions
--enable-libgcj --disable-java-awt --without-x --enable-java-gc=boehm
--disable-libgcj-debug --enable-interpreter --enable-hash-synchronization
--enable-libstdcxx-debug
Thread model: win32
gcc version 3.4.5 (mingw-vista special r3)
Here is the "./config" output with the 4.4.0 compiler (abbreviated):
sh-3.1$ ./config
Operating system: i686-whatever-mingw
Configuring for mingw
Configuring for mingw
no-gmp [default] OPENSSL_NO_GMP (skip dir)
no-jpake [experimental] OPENSSL_NO_JPAKE (skip dir)
no-krb5 [krb5-flavor not specified] OPENSSL_NO_KRB5
no-md2 [default] OPENSSL_NO_MD2 (skip dir)
no-rc5 [default] OPENSSL_NO_RC5 (skip dir)
no-rfc3779 [default] OPENSSL_NO_RFC3779 (skip dir)
no-shared [default]
no-store [experimental] OPENSSL_NO_STORE (skip dir)
no-zlib [default]
no-zlib-dynamic [default]
IsMK1MF=0
CC =gcc
CFLAG =-DOPENSSL_THREADS -DDSO_WIN32 -mno-cygwin -DL_ENDIAN
-DWIN32_LEAN_AND_MEAN -fomit-frame-pointer -O3 -march=i486 -Wall
-DOPENSSL_BN_ASM_PART_WORDS -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT
-DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DRMD160_ASM -DAES_ASM
-DWHIRLPOOL_ASM
EX_LIBS =-lws2_32 -lgdi32 -lcrypt32
CPUID_OBJ =x86cpuid.o
BN_ASM =bn-586.o co-586.o x86-mont.o
DES_ENC =des-586.o crypt586.o
AES_ENC =aes-586.o
BF_ENC =bf-586.o
CAST_ENC =cast-586.o
RC4_ENC =rc4-586.o
RC5_ENC =rc5-586.o
MD5_OBJ_ASM =md5-586.o
SHA1_OBJ_ASM =sha1-586.o sha256-586.o sha512-586.o
RMD160_OBJ_ASM=rmd-586.o
CMLL_ENC= =cmll-x86.o
PROCESSOR =
RANLIB =/mingw/bin/ranlib.exe
ARFLAGS =
PERL =/bin/perl.exe
THIRTY_TWO_BIT mode
DES_PTR used
DES_RISC1 used
DES_UNROLL used
BN_LLONG mode
RC4_INDEX mode
RC4_CHUNK is undefined
e_os2.h => include/openssl/e_os2.h
making links in crypto...
make[1]: Entering directory `/c/Documents and Settings/Robert
Lerche/Application Data/openssl-1.0.0/crypto'
crypto.h => ../include/openssl/crypto.h
...
make[1]: Leaving directory `/c/Documents and Settings/Robert
Lerche/Application Data/openssl-1.0.0/test'
Configured for mingw.
Thanks in advance for any help you can give me.
______________________________________________________________________
OpenSSL Project http://www.openssl.org
User Support Mailing List [email protected]
Automated List Manager [email protected]