gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 06:19:02 25 4
gpt4 key购买 nike

环境:

  • Windows 服务器 2012 R2
  • eclipse 月神
  • 西格温
  • 明格瓦

我正在构建一个 C++ 程序,它使用 LDAP(类似于 MSDN page)查询 Active Directory。我有程序中的以下代码示例:

#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

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

最佳答案

原来我没有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 (区分大小写!)

现在它可以构建并运行了!

关于c++ - 构建时 Windows C++ __imp 引用错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29636093/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com