用ld链接包含stdio函数的目标文件,未找到crt0.o

问题描述 投票:1回答:1

最近,我一直在学习链接器,并尝试使用ld链接简单文件,但是后来,我没有这样做(可能是由于x64体系结构?...我真的无法分辨)。这是我使用的文件:

#include<stdio.h>

int fun(int x);

int main(){
    int i = fun(10);
    printf("%d\n",i);
    return 0;
}

和:

int fun(int x){
    return x+10;
}

我用gcc -c命令编译了它们,然后用命令将它们链接到一个文件中:

ld -r -o a.o main.o fun.o

,最后,我想将a.o文件制成可执行文件。我已经读过/usr/lib/ctr0.o是必需的,但没有找到,我尝试了/x86_64-linux-gnu/crt1.o(并得知它不起作用)。那么,什么是crt0.o的替代品?我的系统中没有crt0.o(我进行了搜索,但可能不在应有的位置)。我还可以使用其他哪个文件,以便执行以下命令:

ld a.o <SOME_FILE> -lc

将产生可执行输出吗?

linker ld crt
1个回答
0
投票

尝试使用ld链接简单文件

除非您要链接某些特殊程序,例如内核或引导加载程序,否则,您应该从不直接在UNIX上使用ld

对于“常规”用户级程序,总是使用适当的编译器前端(对于“ C”为gcc,对于“ C ++”为g++)。

P.S。

如果您想知道crt0.o的来源,请尝试gcc -v a.o,然后gcc显示您。

© www.soinside.com 2019 - 2024. All rights reserved.