ld:找不到lc-错误

ld:找不到lc-错误,c,gcc,linker,ld,C,Gcc,Linker,Ld,我的目的是使用我自己的链接器脚本链接两个代码,为此,我创建了一个简单的链接器脚本(来自internet的所有帮助) 这是我的链接器脚本“link.lds” 我的两个简单的C代码如下。 1) l1.c 我使用的命令有: gcc -c l1.c l2.c ld -o output -T link.lds l1.o l2.o -lc 在执行上述步骤后,我遇到以下错误: ld:cannot find lc 关于撤销信用证 undefined reference to printf(). 我还尝试使

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

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

我使用的命令有:

gcc -c l1.c l2.c
ld -o output -T link.lds l1.o l2.o -lc
在执行上述步骤后,我遇到以下错误:

ld:cannot find lc
关于撤销信用证

undefined reference to printf().
我还尝试使用-L/dirname,这使我返回到printf错误的undf引用

我可以在同样的问题上得到一些帮助和指导吗。。。 PS-我知道我可能在概念上出错和/或可能不知道链接器执行/工作的正确顺序。 在此方面的任何帮助都将不胜感激。
非常感谢

由于您直接调用
ld
,因此没有默认库或默认库搜索路径 如果
gcc
工具驱动程序间接调用了
ld
,则会提供 以通常的方式

因此,除了明确告诉
ld
链接
libc
-lc
)外,您还必须明确 还可以使用
-L
选项告诉它在哪里可以找到
libc
。(看来你 认为
L
-L
的替代品。事实并非如此。)

因此,找出
libc.so
在您的系统上的位置。您可以通过以下方式执行此操作:

realpath $(gcc --print-file-name libc.so)
(注意,不是
——打印文件名libc.so
。@n.m的评论中有一个打字错误)

假设它是
/usr/lib/x86_64-linux-gnu/libc。然后运行:

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

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

这是学习GNU ld的练习吗?如果没有,只需使用
gcc
进行链接,它将为您完成所有“脏活”。为什么您需要自定义脚本?如果目标只是将两个对象链接到一个可执行文件中,则不需要链接器脚本。-lc错误表示在链接器搜索路径中找不到您的libc.a。你知道它在你的系统上的什么地方吗?我已经编辑了这个问题。我有意使用自定义链接器脚本来处理更大的问题陈述。此外,我找到了LBC.A的路径,尝试使用-L/L添加它,但是徒劳地,它仍然提示“未定义的引用Prtff()”错误。请删除C++标签。另外,如果您找到了错误的libc,请使用
gcc--print file name libc.so
查看正确的路径。此外,当您修复库路径时,您将能够创建一个可执行文件,但它无法工作。使用
gcc-vl1.o l2.o-o输出
查看缺少哪些部分。你好,迈克,正在忙于其他模块,现在回到这个模块。它仍然会提示相同的错误。有相同的解决方案吗?我完全按照你的建议做了,也是一样的。ld:找不到lc@ArjunJain这就是错误消息。是什么命令行导致的?我在命令行中输入了一个错误。您的命令行工作正常。非常感谢。我还想知道如何破译链接器映射文件。每个字段是什么意思?任何指导都会有帮助。多谢
undefined reference to printf().
realpath $(gcc --print-file-name libc.so)
ld -o output -T link.lds l1.o l2.o -L/usr/lib/x86_64-linux-gnu -lc