环境:
我正在构建一个使用LDAP查询Active Directory的C ++程序(类似于此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;
}
当我尝试使用Eclipse中的mingw工具链构建此示例时,构建失败,带有ldap_init()
的行以红色下划线。当我将鼠标悬停在错误上时,它会显示&#34;未定义引用_imp__ldap_initA()
。&#34;当我使用cygwin工具链进行尝试时,会产生类似的错误(下划线排列略有不同)。
当我尝试通过cmd(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 :(得分:1)
事实证明我没有安装Windows SDK。我要做的第一件事就是下载并安装它。
然后,在Eclipse中,我不得不对项目配置进行一些更改。
首先,我必须将Windows SDK添加到路径和符号包括目录(右键单击项目 - &gt;属性 - &gt; C / C ++常规 - &gt;路径和符号 - &gt; GNU C ++ - &gt;添加。 ..)。就我而言,我必须添加的目录是C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x64
。
接下来,我必须将Windows LDAP库添加到Cygwin C ++链接库配置(右键单击项目 - &gt;属性 - &gt; C / C ++构建 - &gt;设置 - &gt; Cygwin C ++链接器 - &gt;库)。在“库(-l)”下,添加Wldap32.Lib (区分大小写!) 。
现在它构建并运行!