gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 04:16:43 34 4
gpt4 key购买 nike

最近我一直在学习链接器并尝试使用 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 is needed,但没有找到它,我尝试了/x86_64-linux-gnu/crt1.o (并了解到它不起作用)。那么 crt0.o 的替代品是什么?我的系统中没有 crt0.o(我进行了搜索,但可能不在我应该搜索的位置)。我可以使用什么其他文件代替它,以便命令:

ld a.o <SOME_FILE> -lc

要生成可执行输出吗?

最佳答案

trying to link simple files using ld

你应该永远不要在 UNIX 上直接使用 ld,除非你正在链接一些特殊的程序,比如内核或引导加载程序。

对于“常规”用户级程序,始终使用适当的编译器前端(gcc 用于“C”,g++ 用于“C++ ").

附言

如果你想知道 crt0.o 来自哪里,试试 gcc -v a.ogcc显示 你。

关于linker - 使用 ld 链接包含 stdio 函数的目标文件,找不到 crt0.o,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60608284/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com