构建时Windows C ++ __imp引用错误

时间:2015-04-14 19:45:32

标签: c++ eclipse windows cygwin mingw

环境:

  • Windows Server 2012 R2
  • Eclipse Luna
  • 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()的行以红色下划线。当我将鼠标悬停在错误上时,它会显示&#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

但是从那里开始,我不知道该往哪里去。如何编译?

1 个答案:

答案 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 (区分大小写!)

现在它构建并运行!