我只想弄清楚,为什么 Fedora 没有静态库libm.a
,如果是事实,我应该使用 ?
正如 StackOverflow 中提到的here,我只需从yum
安装 pkg ,但可以认为 Fedora 有一个替换为默认 lib 而不是吗?
编辑
我正在尝试编译:
#include <stdio.h>
#include <stdlib.h>
void fred(int arg)
{
printf("fred: you passed %d\n", 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
感谢。
答案 0 :(得分:2)
这里有几件事......
你不能在你的小例子中使用任何数学函数,所以你真的不需要libm
如果你 需要libm,那么你真的不需要静态 libm.a
。您可以链接动态链接,并且可以使用gcc -lm
执行此操作,而不是直接提供文件名。
如果 由于某种原因需要libm.a
,您可以在glibc-static
包中找到它 - 但由于种种原因,不建议这样做
正如错误消息所示,您错过了main()
功能的真正错误。尝试将其添加到文件的底部:
int main(int argc,char ** argv) { 佛瑞德(1); 佛瑞德(2); 佛瑞德(42); }
然后使用gcc -o fred fred.c