我只是想弄清楚它,为什么 fedora 没有静态库libm.a
,如果是事实,我应该使用?如 stackoverflow 中所述,我可以简单地从 yum
安装 pkg ,但可以认为可以认为 fedora fedora 可以替换为默认值lib 而不是?
编辑
我正在尝试编译以下内容:
#include <stdio.h>
#include <stdlib.h>
void fred(int arg)
{
printf("fred: you passed %dn", arg);
}
,输出是这样的:
$ gcc -o fred fred.c /usr/lib64/libm.so
/usr/lib/gcc/x86_64-redhat-linux/6.2.1/../../../../lib64/crt1.o: En la función `_start':
(.text+0x20): referencia a `main' sin definir
collect2: error: ld devolvió el estado de salida 1
用lm
和/usr/lib/libm.a
和/usr/lib64/libm.a
我在这里完成了所有封闭式和其他帖子,yum install glibc-static
并检查了/usr/lib64/libm.so
编辑
repoquery --whatprovides /usr/lib64/libm.a
:
failure: repodata/repomd.xml from fedora-cisco-openh264: [Errno 256] No more mirrors to try.
https://codecs.fedoraproject.org/openh264/24/x86_64/repodata/repomd.xml: [Errno -1] repomd.xml signature could not be verified for fedora-cisco-openh264
谢谢。
这里的几件事....
-
您在小示例中不使用任何数学功能,因此您实际上不需要libm
-
如果您需要需要libm,那么您实际上不需要static
libm.a
。您可以针对动态链接,并且可以使用gcc -lm
进行此操作,而不是直接给出文件名。 -
如果您 DID 需要
libm.a
,则可以在glibc-static
软件包中找到它,但是出于许多原因,不建议这样做。 -
正如错误消息所说,真正的问题是您缺少
main()
功能。尝试将其添加到文件的底部:int main(int argc,char ** argv) { 弗雷德(1); 弗雷德(2); 弗雷德(42); }
然后用gcc -o fred fred.c