最近,我一直在学习链接器,并尝试使用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
将产生可执行输出吗?
尝试使用ld链接简单文件
除非您要链接某些特殊程序,例如内核或引导加载程序,否则,您应该从不直接在UNIX上使用ld
。
对于“常规”用户级程序,总是使用适当的编译器前端(对于“ C”为gcc
,对于“ C ++”为g++
)。
P.S。
如果您想知道crt0.o
的来源,请尝试gcc -v a.o
,然后gcc
将显示您。