Не удается найти crtn.o, связывающий 32-битный код в 64-битной системе - PullRequest
7 голосов
/ 21 марта 2012

Я пытаюсь собрать 32-битный код с использованием NASM и GCC в 64-битной системе.Я использую следующие две команды

nasm -f elf32 -g -F stabs coc.asm
gcc -m32 -o coc coc.o

Кажется, что NASM работает нормально, но LD жалуется:

/usr/bin/ld: cannot find crt1.o: No such file or directory
/usr/bin/ld: cannot find crti.o: No such file or directory
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.6.1/libgcc.a when searching for -lgcc
/usr/bin/ld: cannot find -lgcc
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.6.1/libgcc_s.so when searching for -lgcc_s
/usr/bin/ld: cannot find -lgcc_s
/usr/bin/ld: cannot find -lc
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.6.1/libgcc.a when searching for -lgcc
/usr/bin/ld: cannot find -lgcc
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.6.1/libgcc_s.so when searching for -lgcc_s
/usr/bin/ld: cannot find -lgcc_s
/usr/bin/ld: cannot find crtn.o: No such file or directory
collect2: ld returned 1 exit status

Я использую Ubuntu 11.10, и я проверил, и я почти уверенlibc установлен.

Ответы [ 3 ]

11 голосов
/ 21 марта 2012

Вы не собираете, а связываете исполняемый файл, для которого нужны файлы запуска ОС.

Кажется, у вас не установлено gcc-*-multilib, содержащее необходимые файлы: http://packages.ubuntu.com/oneiric/amd64/gcc-4.6-multilib/filelist

2 голосов
/ 21 марта 2012

Вам необходимо установить gcc-multilib, чтобы получить нужную 32-битную библиотеку

0 голосов
/ 21 марта 2012

У меня была очень похожая проблема на Ubuntu 11.10. См. Мой вопрос на SO об этом . Что помогло мне, это связать crt*.o с /lib/. После этого у меня никогда не было других проблем с этим вопросом. Немного больше обломков, но для меня это решило проблемы.

...