【问题标题】:Windows C++ __imp reference error when building构建时 Windows C++ __imp 引用错误
【发布时间】: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


    【解决方案1】:

    原来我没有安装Windows SDK。我要做的第一件事就是下载并安装它。

    然后,在 Eclipse 中,我不得不对项目配置进行一些更改。

    首先,我必须将 Windows SDK 添加到路径和符号包含目录(右键单击项目 -> 属性 -> C/C++ 常规 -> 路径和符号 -> GNU C++ -> 添加...)。就我而言,我必须添加的目录是C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x64

    接下来,我必须将 Windows LDAP 库添加到 Cygwin C++ 链接器库配置(右键单击项目 -> 属性 -> C/C++ 构建 -> 设置 -> Cygwin C++ 链接器 -> 库)。在“库 (-l)”下,添加 Wldap32.Lib (区分大小写!)

    现在它构建并运行了!

    【讨论】:

      猜你喜欢
      • 2021-10-01
      • 1970-01-01
      • 2018-09-02
      • 2020-04-28
      • 1970-01-01
      • 2018-01-22
      • 2022-09-28
      • 1970-01-01
      • 2014-04-14
      相关资源
      最近更新 更多