Comment construisez-vous des bibliothèques OpenLDAP sur Windows en utilisant Msys2 et MinGW?

J’essaie de comstackr OpenLDAP sous Windows. J’ai beaucoup de difficulté à le faire.

J’ai commencé à suivre les instructions décrites ici , mais je me suis vite rendu compte que c’était obsolète.

J’ai alors trouvé ceci et réalisé que ce n’était pas tout à fait correct non plus.

J’ai finalement trouvé ceci et ai expérimenté le bogue exact que ce type est en train de vivre. Cependant, lorsque j’essayais de le contourner (commentant la ligne 1116 dans portable.h), j’ai rencontré davantage de problèmes.

Existe-t-il une source canonique pour la construction de cette bibliothèque?

J’utilise:

  • Windows 7 Professionnel.
  • Msys2 (x86_64 20160205 à partir d’ ici )
  • OpenSSL (version 1.0.1r à partir d’ ici )
  • rxspencer (alpha 3.8.g7 à partir d’ ici )
  • OpenLDAP (version 2.4.44 à partir d’ ici )

Étape 0:

Comstackr rxspencer

./configure make make check make install 

Étape 1:

Comstackr OpenSSL à l’aide d’une invite de commande Visual Studio 2010 x64

 perl Configure no-ssl2 VC-WIN64A --prefix=d:\temp\openssl\x64 ./ms/do_win64a.bat nmake -f ms\nt.mak nmake -f ms\ntdll.mak cd out32 ..\ms\test 

Étape 2:

Modifier le chemin pour que configure puisse voir rxspencer

 PATH=$PATH:/usr/local/lib 

Étape 3:

 env \ CFLAGS="-I/usr/local/include/rxspencer" \ LD_LIBRARY_PATH="/c/work/openssl/lib:/usr/local/lib" \ LDFLAGS="-L/c/work/openssl/lib -L/usr/local/lib" \ CPPFLAGS="-I/c/work/openssl/include" \ LIBS="-lssl -lrxspencer" \ ./configure \ --enable-shared \ --enable-static \ --with-tls \ --disable-bdb \ --disable-hdb \ 2>&1 | tee output_config.log 

Cela marche. Excellent!

Étape 4:

 make depend 2>&1 | tee output_makedepend.log 

Cela marche. Excellent!

Étape 5:

Commentez la ligne 1116 de include / portable.h

Étape 6:

 make 2>&1 | tee output_make.log 

Regardez quelques erreurs qui ressemblent à ceci:

 In file included from init.c:25:0: back-mdb.h:71:2: error: unknown type name 'uint32_t' uint32_t mi_dbenv_flags; ^ back-mdb.h:84:2: error: unknown type name 'uint32_t' uint32_t mi_rtxn_size; ^ back-mdb.h:86:2: error: unknown type name 'uint32_t' uint32_t mi_txn_cp_min; ^ back-mdb.h:87:2: error: unknown type name 'uint32_t' uint32_t mi_txn_cp_kbyte; ^ init.c: In function 'mdb_db_open': init.c:88:2: error: unknown type name 'uint32_t' uint32_t flags; 

Ajouter:

 #ifdef HAVE_STDINT_H #include  #endif 

au sumt de

 servers/slapd/back-mdb/back-mdb.h 

refaire …

Maintenant, j’ai un tas d’erreurs qui ressemblent à ceci:

 symdummy.c:1:5: error: expected identifier or '(' before ssortingng constant int ".refptr.ad_index_mutex"(); ^ symdummy.c:2:5: error: expected identifier or '(' before ssortingng constant int ".refptr.ad_undef_mutex"(); ^ symdummy.c:3:5: error: expected identifier or '(' before ssortingng constant int ".refptr.at_oc_cache"(); ^ 

pointant vers quelque chose qui ne va pas avec servers / slapd.def?

Qu’est-ce que je fais mal ici? Est-ce que je fais quelque chose de mal et la construction ne fonctionne tout simplement pas du tout pour Windows?

    assez tard pour cela.

    J’ai récemment réussi avec

    Windows 7 Ultimate x64.

    Msys2 x86_64 20160205

    OpenLDAP 2.4.46 <== différent de vous

    J’ai désactivé hdb et bdb comme vous l’avez fait également. J’ai activé la bibliothèque partagée, mais je ne sais pas s’ils ont été compilés.

    Je remarque que cela peut ne pas être la liste complète de ce que vous voulez, essayez simplement de partager.

    Et c’est grâce à votre aide que j’ai pu surmonter ce problème portable.h et init.c.

    Ensuite, ma make depend et réussit sans problème. J’ai fait quelques tests simples avec cela, le slapd fonctionne pour moi, je suis capable de ldapsearch, ldapadd et de me connecter depuis ldapAdmin.

    pendant make depend, j’ai vu le problème nt_err.c et je l’ai copié manuellement depuis openldap-2.4.46 / libraries / lblber / nt_err.c dans /openldap-2.4.46/servers/slapd/slapi pour ignorer cet avertissement. Mais je ne peux pas résoudre le problème manquant d’en-tête netdb.h, néanmoins il a quand même fonctionné.