2011-03-12 48 views
5

我試圖使用ldap_bind,但得到這個錯誤。從ldap.h使用ldap_bind C++

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

回答

2

我和OpenLDAP的沒有經驗,但是從標題看來你需要:

extern "C" { 
# define LDAP_DEPRECATED 
# include <ldap.h> 
# include <lber.h> 
} 
+0

查看代碼後,我不得不定義LDAP_DEPRECATED,所以你是正確的。謝謝 – Jeremiah 2011-03-12 14:38:16

+0

@Jeremiah:他們沒有把它放在手冊頁中是一種遺憾。 – 2011-03-12 14:39:28

1

這導致了一些編譯錯誤在目前的版本,因爲在ldap.h使用#if LDAP_DEPRECATED,而不是#ifdef,給宏值:

#define LDAP_DEPRECATED 1 

它是好去。

1

不使用ldap_bind。它被棄用。而是使用ldap_sasl_bind
ldap.h已經過時了大量的功能主要是安全方面的原因

看看下面的命令,它列出了所有過時的功能

grep deprecate < /usr/include/ldap.h 
0

在* nix系統中,或者,它可以讓你指定編譯任何系統旗幟,你可以添加以下到您的標記的列表:

-DLDAP_DEPRECATED 

這允許您使用已棄用的棄用的功能,而無需定義添加到您所有的源/ heade的頂部r文件。