如何在Linux上从汇编代码调用c库?

发布于 2024-11-24 19:09:59 字数 1139 浏览 0 评论 0原文

我正在尝试在 Intel 架构上的 Linux 汇编中编译一个小程序。我想使用C库的一些函数,但它没有链接。

这是我的汇编程序:

.text
.globl main

main:
    pushl $512
    call malloc
    addl $4, %esp

    mov $1, %eax
    mov $0, %ebx
    int $0x80

我正在此处进行编译

as --32 -o output.o output.asm

,一切顺利。然后当我链接时

ld -static -m elf_i386 -o a.out output.o -lc

,我收到以下错误:

(.text+0x1b8):对 _Unwind_Resume' 的未定义引用 /usr/lib32/libc.a(iofclose.o):(.eh_frame+0x167): 未定义的引用 到 __gcc_personality_v0' /usr/lib32/libc.a(iofflush.o):在函数中 fflush': (.text+0xd7): 对 _Unwind_Resume' 的未定义引用 /usr/lib32/libc.a(iofflush.o):(.eh_frame+0xdf): 未定义的引用 __gcc_personality_v0' /usr/lib32/libc.a(iofputs.o):在函数中fputs': (.text+0x108): 对 _Unwind_Resume' 的未定义引用 /usr/lib32/libc.a(iofputs.o):(.eh_frame+0xdf): 未定义的引用 __gcc_personality_v0' /usr/lib32/libc.a(iofwrite.o):在函数中 `fwrite':

我还有另一个错误,但我认为这足以看到问题)

我看到一些解决方案表明我应该与 -lgcc 链接,但在我的计算机上找不到库...

有人有吗一个想法?

I'm trying to compile a little program in Linux assembly on Intel architecture. I want to use some functions of the C library, but it doesn't link.

Here is my assembly program :

.text
.globl main

main:
    pushl $512
    call malloc
    addl $4, %esp

    mov $1, %eax
    mov $0, %ebx
    int $0x80

I'm compiling with

as --32 -o output.o output.asm

here, everything goes fine. And then when i'm linking with

ld -static -m elf_i386 -o a.out output.o -lc

, I got these errors :

(.text+0x1b8): undefined reference to _Unwind_Resume'
/usr/lib32/libc.a(iofclose.o):(.eh_frame+0x167): undefined reference
to
__gcc_personality_v0' /usr/lib32/libc.a(iofflush.o): In function
fflush': (.text+0xd7): undefined reference to_Unwind_Resume'
/usr/lib32/libc.a(iofflush.o):(.eh_frame+0xdf): undefined reference to
__gcc_personality_v0' /usr/lib32/libc.a(iofputs.o): In function
fputs': (.text+0x108): undefined reference to _Unwind_Resume'
/usr/lib32/libc.a(iofputs.o):(.eh_frame+0xdf): undefined reference to
__gcc_personality_v0' /usr/lib32/libc.a(iofwrite.o): In function
`fwrite':

(I've another errors, but it is enough to see the problem, I think)

I saw some solutions indicating that I should link with -lgcc but on my computer the library is not found...

Does someone have an idea ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

小镇女孩 2024-12-01 19:09:59

glibc 需要某些初始化代码与可执行文件静态链接。最简单的方法是使用 gcc 进行链接:

gcc -static -o a.out output.o

您也可以通过将 -v 传递给 gcc 来准确查看链接的内容。

glibc requires certain initialization code to be statically linked with the executable. The easiest way to do this is to link using gcc:

gcc -static -o a.out output.o

You can see exactly what is being linked in by passing -v to gcc as well.

初与友歌 2024-12-01 19:09:59

我遇到了同样的问题,所以我这样做了,

# gcc -static -o a.out hello.o -v

这给了我有关要包含的内容的信息,然后我可以使用 ld 进行链接:

# ld -static -o hello -L`gcc -print-file-name=` /usr/lib/gcc/x86_64-linux-gnu/4.4.7/../../../x86_64-linux-gnu/crt1.o /usr/lib/gcc/x86_64-linux-gnu/4.4.7/../../../x86_64-linux-gnu/crti.o hello.o /usr/lib/gcc/x86_64-linux-gnu/4.4.7/../../../x86_64-linux-gnu/crtn.o /usr/lib/gcc/x86_64-linux-gnu/4.4.7/crtbeginT.o /usr/lib/gcc/x86_64-linux-gnu/4.4.7/crtend.o --start-group -lc -lgcc -lgcc_eh --end-group

I've had same issue, so I did

# gcc -static -o a.out hello.o -v

which gave me information about what to include, then I could link using ld:

# ld -static -o hello -L`gcc -print-file-name=` /usr/lib/gcc/x86_64-linux-gnu/4.4.7/../../../x86_64-linux-gnu/crt1.o /usr/lib/gcc/x86_64-linux-gnu/4.4.7/../../../x86_64-linux-gnu/crti.o hello.o /usr/lib/gcc/x86_64-linux-gnu/4.4.7/../../../x86_64-linux-gnu/crtn.o /usr/lib/gcc/x86_64-linux-gnu/4.4.7/crtbeginT.o /usr/lib/gcc/x86_64-linux-gnu/4.4.7/crtend.o --start-group -lc -lgcc -lgcc_eh --end-group
友谊不毕业 2024-12-01 19:09:59

我通常让 gcc 来做这件事,而不是直接使用 ld。获得对象后,只需 gcc object.o -oexecutable

I usually let gcc do the thing instead of using directly ld. Once you have the object, just gcc object.o -o executable

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文