ld: 找不到 lc -错误

ld: cannot find lc -ERROR

我的目的是 link 两个代码使用我自己的 linker 脚本,同样,我创建了一个简单的 linker 脚本(所有帮助来自互联网) 这是我的 linker 脚本,"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- 我知道我可能在概念上出错了 and/or 可能不知道 link 或者 execution/working 的正确顺序。 对此的任何帮助将不胜感激。 非常感谢!

由于您是直接调用 ld,因此没有默认库或默认库搜索路径 被提供,就像 ldgcc 工具驱动程序间接调用一样 以通常的方式。

因此,除了明确告诉 ld 给 link 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

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