Неопределенная ссылка на 'strnlen', несмотря на "string.h", включает
Я пытаюсь использовать создать проект для LPC1769 на LPCXpresso. У меня есть вызов файла C
#include <string.h>
int main()
{
//some stuff
strnlen(SomeString, someInt);
}
на что я получаю ошибку:
Undefined reference to 'strnlen'
Странная часть в том, что нет проблем с strcpy, strncpy или другими общими строковыми функциями.
Я строю для процессора Cortex-M3. Используемый компилятор: arm-none-eabi-gcc. В Eclipse я установил опцию компоновщика MCU: нет запуска или библиотеки по умолчанию. Я использую Eclipse в Ubuntu.
Хотя может быть достаточно легко обойти это, просто используя strlen, я на самом деле сталкиваюсь с проблемой использования библиотеки, которая использует strnlen, и я не хочу связываться с источником библиотеки.
4 ответа
strnlen
Функция была (до недавнего времени) специфичной для Linux функцией (в некоторой документации, такой как руководство по GNU libc, все еще говорится, что это "расширение GNU"). На текущей странице руководства написано, что это часть POSIX.1-2008. Поскольку вы выполняете кросс-компиляцию, возможно, что библиотека времени выполнения на целевой машине не имеет этой функции. На форуме, опубликованном в 2011 году, говорится именно это.
Я добавил ту же проблему, и я обнаружил, что с помощью -std=gnu++11
флаг компилятора решает это.
Следующее может работать для вас (так как strnlen() не является частью библиотеки времени выполнения).
Определите свою / локальную версию strnlen()
,
int strnlen(char *param, int maxlen)
{
// Perform appropriate string manipulation ... as needed.
// Return what you need.
};
Вы хотите включить это вместо:
#include <string.h>
Разница между <>
а также ""
в том, что <>
поиск файлов заголовков в вашей системе включает в себя папку. ""
ищет файлы заголовков в текущем каталоге и в любых других папках включения, указанных -I directory