Я работаю над Windows XP с Visual Studio 2005. Мой проект — это проект Cmake, созданный после создания API-интерфейса абстракции LDAP в Linux. Я пытаюсь как-то заставить его работать в Windows.
У меня необычная ошибка связывания типа LNK2019
main.obj: ошибка LNK2019: внешний символ без разрешения _strcpy ссылка на функцию _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]);
, происходит ошибка связывания, и когда я оставляю ее там, программа компилируется и может выполняться, но segfault на ней (это уже другая история).
Я не могу понять, почему компоновщик ведет себя таким образом.
strcpy
в функцииmenu
? Почему вы считаете, что ошибка компоновщика связана с функцией, которую вы выбрали? Я обращаю внимание на звонокstrcpy
. О, и что произойдет, если вы замените strcpy наstrncpy
, который вы уже используете. - person torak   schedule 03.08.2010