ошибка LNK2019 необъяснимо при попытке портировать openldap на windows - PullRequest
0 голосов
/ 03 августа 2010

Я работаю на Windows XP с Visual Studio 2005. Мой проект - это проект Cmake, созданный после создания API абстракции LDAP в Linux. Я пытаюсь как-то заставить его работать на 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 голосов
/ 04 августа 2010

Наконец-то !!после работы над опцией компоновщика в Visual Studio я понял, что была включена опция /NODEFAULTLIB:msvcrtd.lib, опция, которая привинтила компоновщик.без него компоновщик может правильно связать разные объекты.(эта опция была включена после наблюдения за тем, что в моем коде также была проблема с компоновщиком lnk2001)

Примечание: я все еще не могу сказать, почему эта опция связана с проблемами связывания моего собственного объекта, обычно / NODEFAULTLIB: msvcrtd.lib используется для отключения включения библиотеки по умолчанию msvcrtd.lib.

Надеюсь, это кому-нибудь поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...