C- fedora动态替换libm.a(静态lib)



我只是想弄清楚它,为什么 fedora 没有静态库libm.a,如果是事实,我应该使用?如 stackoverflow 中所述,我可以简单地从 yum安装 pkg ,但可以认为可以认为 fedora fedora 可以替换为默认值lib 而不是?


编辑

我正在尝试编译以下内容:

#include <stdio.h>
#include <stdlib.h>
void fred(int arg)
{
    printf("fred: you passed %dn", 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,那么您实际上不需要static libm.a。您可以针对动态链接,并且可以使用gcc -lm进行此操作,而不是直接给出文件名。

  3. 如果您 DID 需要libm.a,则可以在glibc-static软件包中找到它,但是出于许多原因,不建议这样做。

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

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

然后用gcc -o fred fred.c

编译

最新更新