c - 尝试将 openldap 移植到 Windows 时出现错误 LNK2019 无法解释

标签 c linker linker-errors openldap

我正在使用 Visual Studio 2005 处理 Windows XP。我的项目是在 Linux 上创建 LDAP 抽象 API 后创建的 Cmake 项目。我正在尝试以某种方式使其在 Windows 上运行。

我遇到了 LNK2019 类型的异常链接错误

main.obj : error LNK2019: symbole externe non résolu _strcpy référencé dans la fonction _menu

碰巧这个函数在我的 main.c 中,上面的链接错误来 self 的另一个文件 LDAP.C,其中包含 load_values_from_attr() 函数

/****/

static INT16 load_values_from_attr(t_LdapSearchContext ctx,
    UINT32 result_max_count, LDAP *ld, LDAPMessage *result_message,
    BerElement *ptr)
{
    UINT16 j=0;
    UINT16 i=0;

    char *str_attr; 
    struct berval **str_values;
    str_attr=ldap_first_attribute(ld, result_message, &ptr);

    if (str_attr == NULL) return 1;
    str_values=ldap_get_values_len(ld, result_message, str_attr);
    strcpy(ctx.attributs[i].attrs, str_attr);
    while(str_values[j]!=NULL && j+1<RESULT_WIDTH)
    {
        strncpy(ctx.attributs[i].values[j+1].val,
            str_values[j]->bv_val,MAX_LENGTH);
#ifdef WIN32
        ber_bvfree(str_values[j]); // <<< here is my problem
#endif
        j++;
    }

/****/

当我删除或注释该行时: ber_bvfree(str_values[j]); 会发生链接错误,当我将其留在那里时,程序会编译并可以执行,但会出现段错误(这是另一个故事)。

我不明白为什么链接器会这样。

最佳答案

终于!!在 Visual Studio 中研究链接器选项后,我认为有 /NODEFAULTLIB:msvcrtd.lib enable ,破坏链接器的选项。没有它链接器可以正确链接不同的对象。 (在观察到我的代码中也存在 lnk2001 链接器问题后,已启用此选项)

注意:我仍然不明白为什么这个选项会在链接我自己的对象时遇到问题,通常/NODEFAULTLIB:msvcrtd.lib 用于禁用默认库 msvcrtd.lib 包含。

我希望这会对某人有所帮助

关于c - 尝试将 openldap 移植到 Windows 时出现错误 LNK2019 无法解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3398924/

相关文章:

python - 使用 Cython 将 Python 代码编译为静态链接的可执行文件

c++ - 编译 boost.asio 示例时出现链接器错误

c - 如何扫描逗号,但逗号未分配给结构? C

c - 检查符号链接(symbolic link)的目标是否存在的方法是什么?

c - 无效参数读写文件

c - 为什么我的程序输出为 "direct://"?

c++ - 仅发布版本的大量链接器问题

c++ - 改变静态链接 DLL 的 DLL 搜索路径

Swift:CouchbaseLite.framework 不起作用?

c++ - 静态库在控制台中有效,但在 GUI 应用程序中无效 - 奇怪