将openldap移植到windows的方法

首先,至少需要有Berkeleydb和Cyrus SASL
如果需要tls,还要有openssl
openldap自从2.2x版以后就不在提供移植到windows下的工程文件了,但是它里面还是有有这方免得考虑,移植起来还是可以实现的。经过两三天的实验,我已经把其中的几个比较重要的库编译出来了,下面介绍下这个在windows下编译openldap的过程。我的编译环境是win xp, VC 6.0,另外我还用到了cygwin,其实并不重要,只是为了要把那些在linux下产生的代码拷贝过来。

1、编译liblber
(1)建立静态链接库工程文件,取名为liblber
(2)导入4个头文件到openldap\include中:
        lber_types.h
        ldap_config.h
        ldap_features.h
        portable.h
(2)导入librares\liblber中的文件,可以不用包括idtest.c, dtest.c和etest.c
(3)关闭宏:
TIME_WITH_SYS_TIME
HAVE_SYS_TIME_H
LDAP_SYSLOG
HAVE_LONG_LONG
HAVE_POLL_H
HAVE_GETOPT_H
HAVE_GETOPT
HAVE_SYS_IOCTL_H
HAVE_FCNTL
HAVE_NONPOSIX_STRERROR_R
HAVE_STRERROR_R
HAVE_STRERROR
打开宏:
HAVE_WINSOCK2
HAVE_WINSOCK2_H
HAVE_WINSOCK_H
HAVE_WINSOCK
(4)把所有的long long 型定义都改成unsigned long型
(5)编译,生成liblber.lib

2、编译libldap
(1)建立静态链接库工程libldap
(2)导入libraries\libldap中文件,除了dntest.c ftest.c test.c这些测试工程
(3)关闭宏:
HAVE_SYS_PARAM_H
HAVE_ARPA_NAMESER_H
HAVE_SYS_FILE_H
HAVE_RESOLV_H
HAVE_RES_QUERY
HAVE_TLS
HAVE_POLL
HAVE_TLS
HAVE_SYSCONF
HAVE_SYS_UIO_H
LDAP_PF_LOCAL
HAVE_DIRENT_H
HAVE_HSTRERROR
HAVE_GETDTABLESIZE
HAVE_INET_ATON
打开宏:
#define socklen_t int
在portable.h中加入下面两行:
#define strcasecmp        stricmp
#define strncasecmp        strnicmp
(4)编译,生成libldap.lib

3、编译liblutil
(1)建立静态库工程liblutil
(2)导入libraries\liblutil中的文件,但不导入detach.c
(3)关闭宏:
HAVE_FLOCK
HAVE_SIGACTION
URANDOM_DEVICE
在portable.h后面加上以下四行:
        #define PROV_RSA_FULL 1
        typedef unsigned long HCRYPTPROV;
        typedef unsigned long DWORD;
        typedef unsigned char BYTE;
(4)编译,生成liblutil.lib


基本上如果要开发客户端的话,把这三个库编出来似乎就可以了,我试了试,一般的增、删、改、查都可以了,注意开发客户端时,除了要连接这几个库,还要有libsasl.lib和ws2_32.lib这些库,可能还会有wsock32.lib吧,如果连接不过可以试试。。。

有什么不足之处,希望大家指正。多多发言啊,臭鸡蛋鲜花一块上,什么我都要,哈哈

原文地址:https://www.cnblogs.com/adylee/p/1283933.html