当前位置:  开发笔记 > 运维 > 正文

如何将C运行时库与'ld'链接?

如何解决《如何将C运行时库与'ld'链接?》经验,为你挑选了1个好方法。

我正在学习NASM大学课程.我想链接C运行时库ld,但我似乎无法环绕它我的头.我有一64 bitLinux Mint已安装的机器.

我感到困惑的原因是 - 据我所知 - 而不是链接C运行时,gcc将您需要的东西复制到程序中.我可能错了,所以请不要犹豫,纠正我.

到目前为止我所做的是将其链接起来gcc.产生的机器代码,我无法跟随虽然乱七八糟,甚至像换了一个小程序raxrbx,这不是学习的目的,伟大的.(请注意该程序有效.)

我不确定它是否相关,但这些是我用来编译和链接的命令:

# compilation
nasm -f elf64 swap.asm
# gcc
gcc -o swap swap.o
# ld, no c runtime
ld -s -o swap swap.o

先感谢您!


结论:

既然我对这个问题有了正确的答案,我想提一下以下几点.glibc动态链接可以像Z boson的答案(对于64位系统)那样完成.如果你想静态地做,请按照这个链接(我从Z boson的回答中重新发布).

这是Jester发布的一篇关于程序如何从linux开始的文章.

要查看gcc链接.o-s的内容,请尝试以下命令:gcc -v -o swap swap.o.请注意,'v'代表'详细'.

另外,如果您对64位汇编感兴趣,请阅读此内容.

感谢的回答和有益的见解!演讲结束.



1> Z boson..:

这是一个libc不使用GCC 的例子.

extern printf
extern _exit

section .data
    hello:     db 'Hello world!',10

section .text
    global _start   
_start:
    xor eax, eax
    mov edi, hello
    call printf
    mov rax, 0    
    jmp _exit

像这样编译和链接:

nasm -f elf64 hello.asm
ld hello.o -dynamic-linker /lib64/ld-linux-x86-64.so.2 -lc -m elf_x86_64

到目前为止,这对我来说运行良好,但对于静态链接,它很复杂.

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有