2012-04-16 1 views
0

Когда я пытаюсь скомпилировать программу C с Clang компилятора я получаю это сообщениеClang линкер и i686

/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/gcc/i686-linux-gnu/4.6.1/../../../../lib/crt1.o' is incompatible with i386 output 
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/gcc/i686-linux-gnu/4.6.1/../../../../lib/crti.o' is incompatible with i386 output 
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/gcc/i686-linux-gnu/4.6.1/../../../../lib/crtn.o' is incompatible with i386 output 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

Как я могу исправить эту проблему? Если это важно:

$ uname -a 
Linux asus 3.0.0-17-generiC#30-Ubuntu SMP Thu Mar 8 17:34:21 UTC 2012 i686 i686 i386 GNU/Linux 
+0

Это необычно; у вас есть 32-битная система, и все же ваши библиотеки 64-битные? Вы сами устанавливали какие-либо библиотеки из источника? – trojanfoe

+0

32-разрядные библиотеки были заменены на 64-битные после обновления до Ubuntu 11.10 –

+0

Но ядро ​​не было? Я думаю, что ваша система сломана. – trojanfoe

ответ

0

Звон компилятор, по существу говоря, что исходный код в вопросе использования x86-64 расширение процессора (также известный как amd64 и '64 битовое процессор '), но вы пытаетесь не {{использовать только архитектуру i386, которая также используется (и расширена) i [456] 86}. Это по умолчанию 32-разрядные процессоры. Скорее всего, вы загрузили неправильную версию (64-разрядную версию и 32-разрядную версию) программного обеспечения, которое вы пытаетесь скомпилировать.

+0

Я пытаюсь скомпилировать базовую программу, такую ​​как int main() {return 0;}. –

0

Вы связываете библиотеку 64 бит с 32-битной библиотекой. Это смешивание создает ошибки. Вы можете проверить архитектуру в Linux с помощью команды «objdump», а для окон вы можете использовать зависимый ходок. Я также столкнулся с такой же проблемой. Если вы используете linux, вы должны изменить его, используя команду -m64 вместо -m32. Команда -m64 предназначена для создания 64-битной библиотеки, а -m32 предназначена для создания 32-битной библиотеки.