2016-02-09 4 views
1

Я пытаюсь скомпилировать файл, содержащий stdint.h для ARM (в частности, Cortex-M3) с использованием arm-none-eabi (который является пакетом Debian). Команда:Clang cross-compilation for ARM

clang -I/usr/lib/gcc/arm-none-eabi/4.8/include \ 
    -target arm-none-eabi cfile.c -o cfile.o 

(-mcpu, -mfpu, -mfloat-abi опущены для простоты)

Возвращает ошибку:

In file included from cfile.c:1: 
In file included from ./cfile.h:4: 
In file included from /usr/lib/gcc/arm-none-eabi/4.8/include/stdint.h:9: 
In file included from /usr/lib/llvm-3.5/bin/../lib/clang/3.5.0/include/stdint.h:61: 
In file included from /usr/include/stdint.h:25: 
/usr/include/features.h:374:12: fatal error: 'sys/cdefs.h' file not found 
# include <sys/cdefs.h> 
     ^
1 error generated. 

Я обычно следующие this guide.

Мои версии:

$ clang --version 
Debian clang version 3.5.0-10 (tags/RELEASE_350/final) (based on LLVM 3.5.0) 

$ arm-none-eabi-gcc --version 
arm-none-eabi-gcc (4.8.4-1+11-1) 4.8.4 20141219 (release) 

Любые идеи о том, как подходить к решению этого?

P.S .: Не дубликат this question.

+0

Какая у вас хост-система (OSX)? вы можете попробовать установить g ++ - multilib – Arseniy

+0

@Arseniy Это Debian x86_64. –

+0

Попробуйте установить 'g ++ - multilib'. Кстати, лучше использовать опцию' --sysroot'. '--sysroot =/usr/lib/gcc/arm-none-eabi/4.8 /' – Arseniy

ответ

2

Чтобы решить эту проблему, вы должны установить g++-multilib
g++-multilib - компилятор GNU C++, довольно переносимый оптимизирующий компилятор для C++. Он установит необходимые заголовки.

В ответ на sysroot вариант (из секции комментариев): Вы абсолютно правы sysroot предполагается использовать с перекрестными компиляторов, установленных с молниями. Неясно, из какого компилятора вы пытаетесь использовать.

+0

Знаете ли вы, почему заголовки компилятора GNU C++ работали с clang, но GCC этого не сделали? И как именно это помогло, так как я все еще указываю на папку GCC для разрешения заголовков? –

+0

@andreyg Это помогло, потому что вы установили эти заголовки в свою систему. Как вы можете видеть в своем вопросе, в процессе компиляции использовался системный заголовок stdind.h из gcc look for stdint в системе. – Arseniy

Смежные вопросы