最近我一直在学习链接器,并尝试使用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/crt0.o,但是没有找到它,所以我尝试了 /x86_64-linux-gnu/crt1.o (结果失败了)。那么,crt0.o 的替代品是什么呢?我的系统里没有 crt0.o(我做了搜索,但可能不是在该搜索的地方)。我可以用什么其他文件来替代它,这样命令就可以运行:
ld a.o <SOME_FILE> -lc
这会产生可执行输出吗?
crt1.o
,或者也可能是Scrt1.o
。关键在于精确的名称和位置取决于许多事情,编译器驱动程序知道,而你不知道。 "学习如何..." -- 这很好,但你应该在问题中提到这一点。 - Employed Russian