«strcmp» не был объявлен в этой области

Я работаю над созданием цепочки инструментов ios с помощью этого учебника. Когда я запускаю команду make ENABLE_OPTIMIZED=1, я получаю этот вывод.

llvm[0]: Reconfiguring with /home/connor/llvm-svn/configure
config.status: creating Makefile.config
config.status: creating llvm.spec
config.status: creating docs/doxygen.cfg
config.status: creating tools/llvm-config/llvm-config.in
config.status: creating include/llvm/Config/config.h
config.status: creating include/llvm/Support/DataTypes.h
config.status: include/llvm/Support/DataTypes.h is unchanged
config.status: creating include/llvm/ADT/hash_map
config.status: include/llvm/ADT/hash_map is unchanged
config.status: creating include/llvm/ADT/hash_set
config.status: include/llvm/ADT/hash_set is unchanged
config.status: creating include/llvm/ADT/iterator
config.status: include/llvm/ADT/iterator is unchanged
config.status: executing setup commands
config.status: executing Makefile commands
config.status: executing Makefile.common commands
config.status: executing examples/Makefile commands
config.status: executing lib/Makefile commands
config.status: executing runtime/Makefile commands
config.status: executing test/Makefile commands
config.status: executing test/Makefile.tests commands
config.status: executing tools/Makefile commands
config.status: executing utils/Makefile commands
config.status: executing projects/Makefile commands
config.status: executing bindings/Makefile commands
config.status: executing bindings/ocaml/Makefile.ocaml commands
make[1]: Entering directory `/home/connor/llvm-svn/lib/System'
llvm[1]: Compiling Alarm.cpp for Release build 
llvm[1]: Compiling Disassembler.cpp for Release build 
Disassembler.cpp: In function ‘std::string llvm::sys::disassembleBuffer(uint8_t*, size_t, uint64_t)’:
Disassembler.cpp:44:12: warning: variable ‘bits’ set but not used [-Wunused-but-set-variable]
llvm[1]: Compiling DynamicLibrary.cpp for Release build 
DynamicLibrary.cpp: In static member function ‘static void* llvm::sys::DynamicLibrary::SearchForAddressOfSymbol(const char*)’:
DynamicLibrary.cpp:178:5: error: ‘strcmp’ was not declared in this scope
DynamicLibrary.cpp:178:5: error: ‘stderr’ was not declared in this scope
DynamicLibrary.cpp:179:5: error: ‘strcmp’ was not declared in this scope
DynamicLibrary.cpp:179:5: error: ‘stdout’ was not declared in this scope
DynamicLibrary.cpp:180:5: error: ‘strcmp’ was not declared in this scope
DynamicLibrary.cpp:180:5: error: ‘stdin’ was not declared in this scope
make[1]: *** [/home/connor/llvm-svn/lib/System/Release/DynamicLibrary.o] Error 1
make[1]: Leaving directory `/home/connor/llvm-svn/lib/System'
make: *** [all] Error 1

Я не уверен, что с этим делать, и мой гуглинг не очень помог.


person Connor    schedule 22.02.2012    source источник
comment
strcmp объявлен в string.h, попробуйте поместить #include <string.h> в DynamicLibrary.cpp, а stderr определен в stdio.h, так что поставьте и это тоже.   -  person jcubic    schedule 23.02.2012
comment
@jcubic опубликуйте свой комментарий в качестве ответа.   -  person 0xDE4E15B    schedule 23.02.2012
comment
Не понимаю этого. Возможно, попробуйте снова запустить ./configure.   -  person jcubic    schedule 23.02.2012
comment
Я думаю, что это работает в любом случае. Спасибо за вашу помощь!   -  person Connor    schedule 23.02.2012


Ответы (2)


Функция strcmp объявлена ​​в string.h, попробуйте поставить

#include <string.h> 

в DynamicLibrary.cpp, а stderr определен в stdio.h, так что поместите это тоже

#include <stdio.h>

Время от времени я находил открытый исходный код с отсутствующими заголовочными файлами.

ОБНОВЛЕНИЕ:

Если у вас другое имя, вы можете выполнить поиск в каталоге включения,

в реальном GNU/Linux bash (должен работать и с Windows 10 WSL) вы можете использовать это для поиска функции:

find /usr/include -type f | xargs grep ' strcmp\s*\('

и это для переменной:

find /usr/include -type f | xargs grep '[\s*]stdin\s*;'

в Git Bash в Windows есть каталоги /include и /mingw64/include, но в моей установке были только файлы заголовков ImageMagick и /mingw64/include/gnumake.h

person jcubic    schedule 22.02.2012

Та же ошибка может возникнуть при написании кода на C++. В этом случае включите библиотеку cstring для устранения ошибки.

#include<cstring>
person Vyshak Puthusseri    schedule 29.09.2020
comment
Да, мне было интересно, почему компилятор g++ выдает ошибку даже после включения строки библиотеки. решил это, включив библиотеку cstring - person Sreeragh M; 30.09.2020