Как вы собираете библиотеки OpenLDAP в Windows, используя Msys2 и MinGW?

Я пытаюсь собрать OpenLDAP на Windows. Я испытываю огромные трудности с этим.

Я начал следовать указаниям, изложенным здесь, но быстро понял, что это устарело.

Затем я нашел это и понял, что это было не совсем правильно.

Я наконец нашел это, и испытал точную ошибку, которую испытывает этот парень. Однако, когда я попробовал его работу (комментируя строку 1116 в portable.h), я столкнулся с большим количеством проблем.

Есть ли канонический источник для создания этой библиотеки?

Я использую:

  • Windows 7 Профессиональная.
  • Msys2 (отсюда x86_64 20160205)
  • OpenSSL (версия 1.0.1r отсюда)
  • rxspencer (альфа 3.8.g7 отсюда)
  • OpenLDAP (версия 2.4.44 отсюда)

Шаг 0:

Скомпилируйте rxspencer

./configure
make
make check
make install

Шаг 1:

Скомпилируйте OpenSSL с помощью командной строки 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

Шаг 2:

Измените путь так, чтобы configure мог видеть rxspencer.

PATH=$PATH:/usr/local/lib

Шаг 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

Это работает. Отлично!

Шаг 4:

make depend 2>&1 | tee output_makedepend.log

Это работает. Отлично!

Шаг 5:

Закомментируйте строку 1116 из include/portable.h

Шаг 6:

make 2>&1 | tee output_make.log

Посмотрите, как появляется куча ошибок, которые выглядят так:

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;

Добавлять:

#ifdef HAVE_STDINT_H
#include <stdint.h>
#endif

к вершине

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

сделать снова...

Теперь у меня есть куча ошибок, которые выглядят так:

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

указывает на что-то не так с серверами /slapd.def?

Что я здесь не так делаю? Я делаю что-то не так, и сборка просто не работает для Windows?

1 ответ

Довольно поздно для этого.

Я недавно преуспел с

Windows 7 Ultimate x64.

Msys2 x86_64 20160205

OpenLDAP 2.4.46 <== отличается от вас

Я отключил hdb и bdb так же, как и вы. Я включил-поделился lib, но не уверен, что они скомпилированы.

Я заметил, что это может быть не полный список того, что вы хотите, просто пытаясь поделиться.

И благодаря вашей помощи я смог преодолеть эту проблему portable.h и init.c.

Тогда мой make depend а также make удалось без проблем. Я сделал несколько простых тестов, с которыми работает slapd, умеет ldapsearch, ldapadd и подключается к нему из ldapAdmin.

во время make-зависимости я увидел проблему nt_err.c, и мне пришлось вручную скопировать ее из openldap-2.4.46/library /liblber/nt_err.c в /openldap-2.4.46/servers/slapd/slapi, чтобы пропустить это предупреждение. Но я не могу решить проблему отсутствия заголовка netdb.h, тем не менее она все еще работает.

Другие вопросы по тегам