2016-12-06 87 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