5

我正在尝试使用 ldap_bind,但出现此错误。

error: âldap_bindâ was not declared in this scope

代码:

#include <lber.h>
#include <ldap.h>
#include <stdlib.h>
#include <stdio.h>
#include <iostream>

using namespace std;

int main()
{
    LDAP *ld;

    char *ldap_host = "ldap://localhost";
    int ldap_port   = 389;
    int auth_method = LDAP_AUTH_SIMPLE;
    int desired_version = LDAP_VERSION3;
    char *root_dn   = "ou=people,dc=localhost,dc=local";
    char *root_ps   = "password";

    int result;

    result = ldap_initialize(&ld, ldap_host);

    cout << "result: " << result << endl;

    result = ldap_set_option(ld, LDAP_OPT_PROTOCOL_VERSION, &desired_version);

    cout << "result: " << result << endl;

    result = ldap_bind_s(ld, root_dn, root_ps, auth_method);

    cout << "result: " << result << endl;
}

我正在用这个命令编译

g++ ldap.cpp -llber -lldap -o prog

TIA

4

4 回答 4

2

我没有使用 OpenLDAP 的经验,但从标题看来你需要:

extern "C" {
# define LDAP_DEPRECATED
# include <ldap.h>
# include <lber.h>
}
于 2011-03-12T14:03:13.360 回答
1

它会导致当前版本中的一些编译错误,因为在ldap.h使用#if LDAP_DEPRECATED而不是#ifdef,给 MACRO 一个值:

#define LDAP_DEPRECATED 1

很高兴去。

于 2012-07-19T20:24:54.580 回答
1

不要使用 ldap_bind。它已弃用。而是使用ldap_sasl_bind.
出于安全原因,ldap.h 已弃用许多功能

查看以下命令,其中列出了所有已弃用的功能

grep deprecate < /usr/include/ldap.h
于 2013-03-15T11:37:26.430 回答
0

在 *nix 系统或任何允许您指定编译标志的系统上,您可以将以下内容添加到标志列表中:

-DLDAP_DEPRECATED  

这允许您使用已弃用的已弃用功能,而无需将定义添加到所有源/头文件的顶部。

于 2014-04-17T00:41:26.340 回答