加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

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

发布时间:2020-12-13 19:54:47 所属栏目:Linux 来源:网络整理
导读:我正在尝试在英特尔架构上的 Linux程序集中编译一个小程序.我想使用C库的一些功能,但它没有链接. 这是我的装配程序: .text.globl mainmain: pushl $512 call malloc addl $4,%esp mov $1,%eax mov $0,%ebx int $0x80 我正在编译 as --32 -o output.o output
我正在尝试在英特尔架构上的 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): 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’:

(我还有其他错误,但我认为这足以看出问题了)

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

有人有想法吗?

解决方法

glibc要求某些初始化代码与可执行文件静态链接.最简单的方法是使用gcc链接:
gcc -static -o a.out output.o

通过将-v传递给gcc,您可以确切地看到链接的内容.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读