0

私はそれを理解しようとしています.なぜFedoraにはスタティックライブラリがないのですか?libm.aそれが事実なら、どれを使うべきですか? ここStackOverflowで述べたように、私は単純にからpkgをインストールできますが、代わりにFedoraがデフォルトのlibyumとして代替品を持っていると考えるのは受け入れられます.いいえ?


編集済み

私はこれをコンパイルしようとしています:

#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で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.a、パッケージで見つけることができますが、glibc-static多くの理由から、これはお勧めできません.

  4. エラー メッセージが示すように、実際に間違っているのは、main()関数が欠落していることです。これをファイルの最後に追加してみてください:

    int main (int argc, char **argv) { fred(1); フレッド(2); フレッド(42); }

そして、コンパイルしますgcc -o fred fred.c

于 2016-12-06T22:18:00.423 に答える