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

Fedora dynamic replacement for libm.a(static lib)?

我只是想弄明白,为什么 Fedora 没有静态库 libm.a,如果这是事实,我应该使用哪个? 正如 Whosebug 中提到的 here 我可以简单地从 yum 安装 pkg,但认为 Fedora 默认有一个替换 lib instead.No?


已编辑

我正在尝试编译这个:

#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

测试 ggc

我已经完成了这里和其他帖子中提到的所有内容,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,那么您实际上并不需要staticlibm.a。您可以 link 反对动态的,您可以使用 gcc -lm 而不是直接给出文件名。

  3. 如果您 确实 出于某种原因需要 libm.a,您可以在 glibc-static 包中找到它 — 但对于整个不推荐这样做的原因有很多。

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

    int main (int argc, char **argv) { 弗雷德(1); 弗雷德(2); 弗雷德(42); }

然后用gcc -o fred fred.c

编译