linux下汇编语言编程gcc,在linux中混合使用汇编语言和C编程

这并不是说它本身找不到它。错误信息有点误导。动态链接程序无法解析其依赖关系,因此您的程序映像无法加载(并且不可执行)

问题是,您正在动态链接libc而不使用任何其他工具来实现动态链接。因此,您剩下一个无法加载的二进制图像。

您可能会发现静态链接与libc更容易。这可以按如下方式完成:

ld -Bstatic -o final kernel.o main.o -lc

注意,您必须在使用它的代码模块main.o之后移动'-lc'位。

如果你试试这个,你会得到一大堆未解决的符号。这是因为您还需要链接libgcc和libgcc_eh。

下面让我相当接近(道歉,在64位系统上工作在这里):

ld -L/usr/lib/gcc/x86_64-linux-gnu/4.4.3/32/ -melf_i386 -Bstatic -lc -o final kernel.o main.o -lc -lgcc -lgcc_eh

这失败我

/usr/lib/gcc/x86_64-linux-gnu/4.4.3/32//libgcc_eh.a(unwind-dw2-fde-glibc.o): In function `_Unwind_Find_FDE':

(.text+0x193b): undefined reference to `dl_iterate_phdr'

这并没有太大的意义。您可能会在32位系统上连接32位的运气更多。

更新

道歉上面的漫游。我再次考虑这一点,当然,可以进行动态链接工作。缺少的部分是指定的动态链接:

在我而言,这是:

ld -dynamic-linker /lib32/ld-linux.so.2 -melf_i386 -o final kernel.o main.o -lc

所以你下面应该工作:

ld -dynamic-linker /lib/ld-linux.so.2 -o final kernel.o main.o -lc

再次更新

为了回应markzar的评论 - 你必须使系统调用干净地退出。这有类似于C中退出(0)的效果:

mov eax,1 ; Syscall #1

mov ebx,0 ; Return code 0 = success

int 80H

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值