0

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


已编辑

我正在尝试编译这个:

#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用and/usr/lib/libm.a和 and测试 ggc/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

谢谢。

4

1 回答 1

2

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

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

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

  3. 如果您出于某种原因确实需要,您可以在包装中找到它 - 但出于多种原因,不建议这样做。libm.aglibc-static

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

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

然后编译gcc -o fred fred.c

于 2016-12-06T22:18:00.423 回答