Динамическая замена Fedora для libm.a(статическая библиотека)?

Я просто пытаюсь понять, почему в Fedora нет статической библиотеки libm.a и если это факт, который я должен использовать? Как упомянуто здесь в Stackru, я могу просто установить pkg из yum, но допустимо думать, что в Fedora замена по умолчанию вместо lib.No?


отредактированный

Я пытаюсь скомпилировать это:

#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

Тест GGC с lm а также /usr/lib/libm.a а также /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

Благодарю.

1 ответ

Решение

Несколько вещей здесь....

  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

Другие вопросы по тегам