2015-03-29 3 views
1

здесь есть что-то очень простое:GNU: Доступ к поврежденной общей ошибке библиотеки

Моего кода (p1.s):

.intel_syntax noprefix 
.arch i386 
.data 
poruka: 
    .asciz "Zdravo svete!\n" 
kraj_poruke: 

.equ duzina_poruke, kraj_poruke - poruka 

.text 
.extern write 
.extern exit 
.globl _start 

_start: 
push duzina_poruke 
push offset poruka 
push 1 
call write 
add esp, 12 

push 0 
call exit 

.end 

команда я использую, чтобы собрать и связать файлы:

as -o p1.o p1.s 
ld -o p1 -dynamic-linker /lib/ld-linux.so.2 p1.o -l c 

После этих команд у меня есть файлы p1.s, p1.o и p1 в каталоге, где я хочу их.

Я получаю ошибку:

bash ./p1 : Accessing a corrupted shared library. 

Почему? : D Спасибо заранее!

Может кто-нибудь объяснить мне, почему это не работает? Заранее спасибо! :)

ответ

1

Это происходит, если вы находитесь на 64-битной системе. Если вы хотите создать 32-битную программу, используйте as --32 и ld -melf_i386. Также обратите внимание, что если вы хотите использовать libc, вы должны использовать точку входа main не _start и использовать gcc -m32 для компиляции и ссылки, чтобы все правильно настроилось и вы избегаете таких загадочных ошибок.

+0

Эй, я пытался (кстати, да я на 64-битной системе): л.д. -melf_i386 -dynamic-линкер /lib/ld-linux.so.2 p1.o -lc но теперь Я получаю сообщение об ошибке: ld: не удалось найти -lc Что с этим –

+0

У вас нет 32-битной библиотеки C. – Jester

+0

Теперь что мне делать? –

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