gpt4 book ai didi

c - ld: 找不到 lc -错误

转载 作者:太空宇宙 更新时间:2023-11-04 08:22:40 25 4
gpt4 key购买 nike

我的目的是使用我自己的链接器脚本链接两个代码,为此,我创建了一个简单的链接器脚本(所有帮助来自互联网)这是我的链接描述文件,“link.lds”

SECTIONS
{
. = 0x10000;
.text : { *(.text) }
. = 0x8000000;
.data : { *(.data) }
.bss : { *(.bss) }
}

而我的两段简单的C代码如下。1) l1.c

#include<stdio.h>
extern int a;
int main()
{
printf("%d",a);
return 0;
}

与2) l2.c

int a=111;

我使用的命令是:

gcc -c l1.c l2.c
ld -o output -T link.lds l1.o l2.o -lc

按照上述步骤操作后,遇到如下错误:

ld:cannot find lc

关于删除 lc,

undefined reference to printf().

我还尝试使用 -L/dirname,这让我回到了 undef 对 printf 错误的引用。

我可以得到一些帮助和指导吗...PS-我知道我可能在概念上犯了错误和/或可能不知道链接器执行/工作的正确顺序。对此的任何帮助将不胜感激。非常感谢!

最佳答案

由于您正在调用 ld直接,没有默认库或默认库搜索路径提供,如果ldgcc 间接调用工具驱动程序以通常的方式。

所以以及告诉ld明确链接 libc ( -lc ),您必须明确告诉它在哪里可以找到libc , 使用 -L选项。 (看来你想想L<path>-l<libname>替代品 .不是。)

因此找出哪里libc.so位于您的系统上。你可以这样做:

realpath $(gcc --print-file-name libc.so)

(注意,不是 --print-file-name-libc.so。@n.m 的评论中有错字)

假设是/usr/lib/x86_64-linux-gnu/libc.so ,就像在我的系统上一样。然后运行:

ld -o output -T link.lds l1.o l2.o -L/usr/lib/x86_64-linux-gnu -lc

这将解决您问题中的问题(但不一定是其他任何问题)。

关于c - ld: 找不到 lc -错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32748229/

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