GOOGLE ADS

четверг, 28 апреля 2022 г.

ошибка: 'strdup' не был объявлен в этой области

Я пытаюсь собрать и установить компилятор и библиотеки Apache Thrift.

Как показано в инструкции./configure && make

И я получаю эту ошибку:

thrift 0.9.3
Building C++ Library.........: no
Building C (GLib) Library....: no
Building Java Library........: no
Building C# Library..........: no
Building Python Library......: no
Building Ruby Library........: no
Building Haxe Library........: no
Building Haskell Library.....: no
Building Perl Library........: no
Building PHP Library.........: no
Building Erlang Library......: no
Building Go Library..........: no
Building D Library...........: no
Building NodeJS Library......: no
Building Lua Library.........: no
If something is missing that you think should be present,
please skim the output of configure to find the missing
component. Details are present in config.log.
make all-recursive
make[1]: Entering directory '/c/University/InternetOfThings/thrift-0.9.3'
Making all in compiler/cpp
make[2]: Entering directory '/c/University/InternetOfThings/thrift-0.9.3/compiler/cpp'
/bin/sh../../ylwrap src/thrifty.yy y.tab.c src/thrifty.cc y.tab.h `echo src/thrifty.cc | sed -e s/cc$/hh/ -e s/cpp$/hpp/ -e s/cxx$/hxx/ -e s/c++$/h++/ -e s/c$/h/` y.output src/thrifty.output -- bison -y -d
updating src/thrifty.hh
make all-am
make[3]: Entering directory '/c/University/InternetOfThings/thrift-0.9.3/compiler/cpp'
g++ -DHAVE_CONFIG_H -I. -I../.. -I../../lib/cpp/src/thrift -I./src -Wall -Wno-sign-compare -Wno-unused -g -O2 -std=c++11 -MT src/libparse_a-thrifty.o -MD -MP -MF src/.deps/libparse_a-thrifty.Tpo -c -o src/libparse_a-thrifty.o `test -f 'src/thrifty.cc' || echo './'`src/thrifty.cc
src/thrifty.yy: In function 'int yyparse()':
src/thrifty.yy:1311:30: error: 'strdup' was not declared in this scope
Makefile:912: recipe for target 'src/libparse_a-thrifty.o' failed
make[3]: *** [src/libparse_a-thrifty.o] Error 1
make[3]: Leaving directory '/c/University/InternetOfThings/thrift-0.9.3/compiler/cpp'
Makefile:588: recipe for target 'all' failed
make[2]: *** [all] Error 2
make[2]: Leaving directory '/c/University/InternetOfThings/thrift-0.9.3/compiler/cpp'
Makefile:609: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/c/University/InternetOfThings/thrift-0.9.3'
Makefile:530: recipe for target 'all' failed
make: *** [all] Error 2

Я отредактировал thrifty.yy и добавил #include <string.h>, но все равно получаю ту же ошибку, что отсутствует strdup.

src/thrifty.yy:1311:30: error: 'strdup' was not declared in this scope(та же ошибка, что и раньше, включая string.h)

Что мне здесь не хватает?

Заранее спасибо!


Решение проблемы

strdupне является стандартной функцией C. Когда компилятор настроен на строгое соответствие C, ему не разрешается выгружать свои собственные нестандартные функции в стандартные заголовки библиотек, такие как <string.h>.

Вы можете решить эту проблему, изменив компилятор для компиляции нестандартного кода C (например, в gcc компилируйте с помощью -std=gnu11вместо -std=c11). Или, альтернативно, придерживайтесь чистого стандарта C.

... или просто реализовать strdup самостоятельно, это легко:

#include <string.h>
#include <stdlib.h>
char* strdup (const char* s)
{
size_t slen = strlen(s);
char* result = malloc(slen + 1);
if(result == NULL)
{
return NULL;
}
memcpy(result, s, slen+1);
return result;
}

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...