2016-12-06 83 views
0

我只是想弄明白,为什么Fedora还没有静态库libm.a,如果它是一个事实,,我应该使用? 作为提到here StackOverflow的我可以简单地从yum安装PKG,但也是可以接受的认为的Fedora有可更换为默认LIB instead.No?Fedora动态替换libm.a(静态库)?


编辑

我试图编译这个:

#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

我已经做了所有在这里和mencioned其他职位,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 

感谢。

这里
+2

的Fedora编译确实有libm.a.正如您列出的链接所指出的那样,libm.a可从glibc-static包中获得。 – Ciclamino

+0

谢谢,但为什么?如果我理解正确_libm.a_是数学的标准库。我不是在寻找一个void()讨论。我认为,如果它不包含在整个_distro_中,它肯定是一个理由。你知道吗? – Hell0

+3

libm.a是数学库的静态版本,显然它包含在整个发行版中,因为它是glibc-static。大多数人不需要静态库,因此他们处于不同的包中。请注意,共享数学库(libm.so)位于glibc-devel中。 – Ciclamino

回答

2

几件事情....

  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

+0

谢谢,它更有意义!我会尝试,我会在这里报告 – Hell0

+0

是的,你是对的@mattdm。非常感谢你。 – Hell0