LINUX.ORG.RU

Где брать имена библиотек для компоновки?


0

0

Вопрос очень простой. Если мы используем в программе на С функцию из какой-нибудь библиотеки - мы должны сказать об этом по крайней мере в двух местах. Во-первых - исходный код, где мы указываем нужный заголовочный файл. Здесь всё ясно, имена заголовочных файлов всегда есть в man'ах. Второе место - опция -l GCC. Вот тут мне пока абсолютно непонятно, где брать для неё имена библиотек. Другими словами, где серым по чёрныму написано, что для использования sin() я должен говорить -lm, а не -llibm или -lsuper-puper-trigonometry?

man 3 fucking_function

anonymous
()

lib<name>.so - симлинк, которым ld пользуется для линковки. <name> указывается в опции -l. все это описано в man ld

для поиска нужных функций по либам используется nm

ananas ★★★★★
()
Ответ на: комментарий от ananas

> для поиска нужных функций по либам используется nm

Что далеко не всегда работает в случае стрипнутых библиотек, а вот `man $ff_name` - обычно помогает (если создатели озаботились документацией).

И вообще, мил человек Аффтар - а откуда вы таки узнаете, какой инклюдос подсасывать - там же и название либки не пробовали выцепить?

Gharik
()

Я обычно использую pkg-config.

pkg-config --libs <Pkg_name> - чтобы получить параметры линковки для gcc

pkg-config --cflags <Pkg_name> - чтобы получить параметры с путями к фалам заголовков.

Dima_Ky
()
Ответ на: комментарий от Dima_Ky

Ну что ж, отвечаем по порядку ;-)
> man 3 fucking_function

Интересная идея. В man'ах под Линукс не принято писать про опции линковки, о чём я и ругался. Из любопытства посмотрел в Инете man'ы Солярки и FreeBSD - всё по-человечески.

В смысле:

Линукс:
SYNOPSIS
#include <math.h>
double sin(double x);

Солярка:
SYNOPSIS
cc [ flag ... ] file ... -lm [ library ... ]
#include <math.h>
double sin(double x);

FreeBSD:
LIBRARY
Lb libm
SYNOPSIS
#include <math.h>
double sin (double x);
float sinf (float x);

О чём это говорит? ;-)

> для поиска нужных функций по либам используется nm
Не знал, попробую.

> sin - грех :)
Это почему это??? ;-)

> ...И вообще, мил человек Аффтар - а откуда вы таки узнаете, какой инклюдос подсасывать - там же и название либки не пробовали выцепить?
Ну я же сказал: узнаю из man'а. Название либы там писать (почему-то только в Линухе) не принято.

> Я обычно использую pkg-config.
Не пробовал - попробую ;-)

Спасибо.

sergey_feo
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.