Fedora动态替换libm.a(静态lib)?

我只想弄清楚,为什么Fedora没有静态库libm.a ,如果它是一个事实, 我应该使用它 ? 正如StackOverflow中所提到的,我可以简单地从yum安装pkg ,但可以认为Fedora有替换默认的lib而不是。不是吗?


编辑

我正在尝试编译这个:

 #include  #include  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测试ggc

我已完成所有mencioned在这里和其他post, 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 

谢谢。

这里有几件事……

  1. 你的小例子中没有使用任何数学函数,所以你真的不需要libm

  2. 如果你确实需要libm,那么你真的不需要静态 libm.a 您可以链接动态链接,并且可以使用gcc -lm执行此操作,而不是直接提供文件名。

  3. 如果由于某种原因确实需要libm.a ,你可以在glibc-static软件包中找到它 – 但由于一系列原因,不建议这样做。

  4. 正如错误消息所说,错误的是你缺少一个main()函数。 尝试将其添加到文件的底部:

    int main(int argc,char ** argv){fred(1); 佛瑞德(2); 佛瑞德(42); }

然后使用gcc -o fred fred.c进行编译