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
,因此没有默认库或默认库搜索路径
被提供,就像 ld
被 gcc
工具驱动程序间接调用一样
以通常的方式。
因此,除了明确告诉 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
这将解决您问题中的问题(但不一定是其他任何问题)。
我的目的是 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
,因此没有默认库或默认库搜索路径
被提供,就像 ld
被 gcc
工具驱动程序间接调用一样
以通常的方式。
因此,除了明确告诉 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
这将解决您问题中的问题(但不一定是其他任何问题)。