ld:找不到lc -ERROR

时间:2015-09-23 19:45:41

标签: c gcc linker ld

我的目的是使用我自己的链接器脚本链接两个代码,为此,我创建了一个简单的链接描述文件(来自互联网的所有帮助) 这是我的链接器脚本“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将我带回了对printf错误的undef引用。

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

1 个答案:

答案 0 :(得分:2)

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

除了明确告诉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

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