2015-04-14 3 views
0

среды:Windows C++ __imp ссылка ошибка при построении

  • Windows Server 2012 R2
  • затмение Луны
  • MinGW

Я строй C++ программы, которая запрашивает против Cygwin Active Directory с использованием LDAP (аналогично этому MSDN page). У меня есть следующий пример кода из программы:

#include<iostream> 
#include<windows.h> 
#include<winldap.h> 

using namespace std; 

int main() { 

    string ldapServerUrl = "192.168.10.29"; 
    int ldapServerPort = 389; 

    LDAP* ldapSession = ldap_init(&ldapServerUrl[0], ldapServerPort); 

    return 0; 

} 

Когда я пытаюсь построить этот образец с MinGW инструментария в Eclipse, сборка терпит неудачу, и линия с ldap_init() подчеркнута красным цветом. Когда я наводил указатель мыши на ошибку, он говорит «Неопределенная ссылка на _imp__ldap_initA()». Когда я пытаюсь использовать его с помощью инструментальной цепочки cygwin, он дает аналогичную ошибку (с немного отличающимся подчеркиванием).

Когда я пытаюсь скомпилировать с помощью ЦМДА (cd в каталог, то g++ main.cpp, Cygwin в PATH), я получаю эту ошибку:

/cygdrive/c/Users/SomeUser/AppData/Local/Temp/ccZczWy3.o:main.cpp:(.text+0x68): 
undefined reference to `__imp_ldap_init' 
/cygdrive/c/Users/SomeUser/AppData/Local/Temp/ccZczWy3.o:main.cpp:(.text+0x68): 
relocation truncated to fit: R_X86_64_PC32 against undefined symbol `__imp_ldap_init' 
collect2: error: ld returned 1 exit status 

Я читал некоторые о приставке __imp_ быть связан с ссылкой (этот материал немного над моей головой, обычно я разработчик Android). Один термин, который я натолкнулся, был declspec. Я посмотрел на winldap.h и имеет следующий (соответствующий?) Код:

#ifndef WINLDAPAPI 
#define WINLDAPAPI DECLSPEC_IMPORT 
#endif 

Но оттуда, я понятия не имею, куда идти. Как мне его собрать?

ответ

0

Оказалось, что у меня не установлено Windows SDK. Первое, что мне нужно было сделать, это загрузить и установить его.

Затем, в Eclipse, мне пришлось внести некоторые изменения в конфигурацию проекта.

Во-первых, мне пришлось добавить Windows SDK к путям, а символы включают каталоги (щелкните правой кнопкой мыши проект -> Свойства -> C/C++ Общие -> Пути и символы -> GNU C++ -> Добавить ...). В моем случае каталог, который я должен был добавить, был C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x64.

Далее я должен был добавить библиотеку LDAP Windows в библиотеку библиотек библиотек Cygwin C++ (щелкните правой кнопкой мыши проект -> Свойства -> C/C++ Build -> Настройки -> Cygwin C++ Linker -> Библиотеки). В разделе «Библиотеки (-l)» добавить Wldap32.Lib (с учетом регистра!).

Теперь он строит и работает!

Смежные вопросы