когда я использую функцию strlcpy в с compilor дать мне ошибку

кто-то сказал мне, чтобы использовать

4 ответов


неопределенная ссылка на `strlcpy'

это происходит, когда линкер (collect2 Если вы используете gcc) не может найти определение функции он жалуется (не на декларации или прототип, а определение, где определен код функции).

в вашем случае это может произойти, потому что нет общего объекта или библиотеки с strlcpy ' s код для ссылки против. Если вы уверены, что там библиотека с кодом, и вы хотите связать с ним, рассмотрите возможность указания пути к библиотеке с помощью -L<path_to_library> параметр передан компилятору.


strlcpy() ist не является стандартной функцией C.

вы можете использовать strncpy() или propably также memcpy() вместо.


добавьте этот код в свой код:

#ifndef HAVE_STRLCAT
/*
 * '_cups_strlcat()' - Safely concatenate two strings.
 */

size_t                  /* O - Length of string */
strlcat(char       *dst,        /* O - Destination string */
              const char *src,      /* I - Source string */
          size_t     size)      /* I - Size of destination string buffer */
{
  size_t    srclen;         /* Length of source string */
  size_t    dstlen;         /* Length of destination string */


 /*
  * Figure out how much room is left...
  */

  dstlen = strlen(dst);
  size   -= dstlen + 1;

  if (!size)
    return (dstlen);        /* No room, return immediately... */

 /*
  * Figure out how much room is needed...
  */

  srclen = strlen(src);

 /*
  * Copy the appropriate amount...
  */

  if (srclen > size)
    srclen = size;

  memcpy(dst + dstlen, src, srclen);
  dst[dstlen + srclen] = '';

  return (dstlen + srclen);
}
#endif /* !HAVE_STRLCAT */

#ifndef HAVE_STRLCPY
/*
 * '_cups_strlcpy()' - Safely copy two strings.
 */

size_t                  /* O - Length of string */
strlcpy(char       *dst,        /* O - Destination string */
              const char *src,      /* I - Source string */
          size_t      size)     /* I - Size of destination string buffer */
{
  size_t    srclen;         /* Length of source string */


 /*
  * Figure out how much room is needed...
  */

  size --;

  srclen = strlen(src);

 /*
  * Copy the appropriate amount...
  */

  if (srclen > size)
    srclen = size;

  memcpy(dst, src, srclen);
  dst[srclen] = '';

  return (srclen);
}
#endif /* !HAVE_STRLCPY */

затем, вы можете использовать его. наслаждаться этим.


Я тоже получил эту ошибку при попытке скомпилировать код и обнаружил, что с Ubuntu 1604 ошибка исчезнет, если я свяжу с -lbsd.