尝试将openldap移植到Windows时,错误LNK2019无法解释

时间:2010-08-03 17:12:39

标签: 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中,上面的链接错误来自我的其他文件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]);发生链接错误,当我离开时,程序编译并可以执行但是会发生段错误(这是另一个故事)。 我无法弄清楚为什么链接器会以这种方式运行,如果有任何人可以给我一些解释,那就是林间空地。

毫不犹豫地向我提出更多解释。

1 个答案:

答案 0 :(得分:0)

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

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

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