Fedora动态替换libm.a(静态lib)?
我只想弄清楚,为什么Fedora没有静态库libm.a
,如果它是一个事实, 我应该使用它 ? 正如StackOverflow中所提到的,我可以简单地从yum
安装pkg ,但可以认为Fedora有替换默认的lib而不是。不是吗?
编辑
我正在尝试编译这个:
#include #include 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在这里和其他post, 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
谢谢。
这里有几件事……
-
你的小例子中没有使用任何数学函数,所以你真的不需要libm
-
如果你确实需要libm,那么你真的不需要静态
libm.a
您可以链接动态链接,并且可以使用gcc -lm
执行此操作,而不是直接提供文件名。 -
如果由于某种原因确实需要
libm.a
,你可以在glibc-static
软件包中找到它 – 但由于一系列原因,不建议这样做。 -
正如错误消息所说,错误的是你缺少一个
main()
函数。 尝试将其添加到文件的底部:int main(int argc,char ** argv){fred(1); 佛瑞德(2); 佛瑞德(42); }
然后使用gcc -o fred fred.c
进行编译