【发布时间】:2015-06-20 13:54:42
【问题描述】:
环境:
- Windows Server 2012 R2
- 日食月神
- cygwin
- MinGW
我正在构建一个使用 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() 的行带有红色下划线。当我将鼠标悬停在错误上时,它显示“未定义对_imp__ldap_initA() 的引用”。当我使用 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
但是从那里开始,我不知道该去哪里。如何编译?
【问题讨论】:
标签: c++ eclipse windows cygwin mingw