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

时间:2016-12-06 18:55:58

标签: c static-libraries fedora libm

我只想弄清楚,为什么 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

测试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 个答案:

答案 0 :(得分:2)

这里有几件事......

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

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

  3. 如果 由于某种原因需要libm.a,您可以在glibc-static包中找到它 - 但由于种种原因,不建议这样做

  4. 正如错误消息所示,您错过了main()功能的真正错误。尝试将其添加到文件的底部:

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

  5. 然后使用gcc -o fred fred.c

    进行编译