Tôi đang cố gắng biên dịch một chương trình nhỏ trong hội đồng Linux trên kiến trúc Intel. Tôi muốn sử dụng một số chức năng của thư viện C, nhưng nó không liên kết.Làm thế nào để gọi thư viện c từ mã lắp ráp trên Linux?
Đây là chương trình lắp ráp của tôi:
.text
.globl main
main:
pushl $512
call malloc
addl $4, %esp
mov $1, %eax
mov $0, %ebx
int $0x80
Tôi đang biên soạn với
as --32 -o output.o output.asm
đây, mọi thứ diễn ra tốt đẹp. Và sau đó khi tôi đang liên kết với
ld -static -m elf_i386 -o a.out output.o -lc
, tôi đã nhận các lỗi này: /usr/lib32/libc.a(iofflush không xác định tham chiếu đến _Unwind_Resume' /usr/lib32/libc.a(iofclose.o):(.eh_frame+0x167): undefined reference to
__gcc_personality_v0' :
(.text + 0x1b8) .o): Trong chức năng
fflush': (.text+0xd7): undefined reference to
_Unwind_Resume' /usr/lib32/libc.a(iofflush.o):(.eh_frame+0xdf): tài liệu tham khảo không xác định để__gcc_personality_v0' /usr/lib32/libc.a(iofputs.o): In function
fputs': (.text + 0x108): tài liệu tham khảo không xác định để_Unwind_Resume' /usr/lib32/libc.a(iofputs.o):(.eh_frame+0xdf): undefined reference to
__gcc_personality_v0 '/usr/lib32/libc.a(iofwrite.o): Trong hàm `fw nghi thức ':
(Tôi đã lỗi khác, nhưng nó là đủ để thấy vấn đề, tôi nghĩ)
tôi thấy một số giải pháp chỉ ra rằng tôi nên liên kết với -lgcc nhưng trên máy tính của tôi thư viện không tìm thấy ...
Có ai đó có ý tưởng không?
Thử liên kết với gcc thay vì ld – Lyke