LINUX.ORG.RU

Вопрос о компоновке в C/C++


0

0

Я изучаю яхык C++, и меня интересует такой вопрос относительно компиляции и компоновке. Как из программ на C/C++ выхывать функции, находящиеся в динамических библиотеках(libc.so, например)? Со стандартными функциями, кажется, понятно: у компилятора где-то записано откуда они. А как быть с нестандартными? Например, вместе с некоторыми программами поставляются библиотеки и заголовочные файлы к функциям из библиотек. Но как использовать их в своих программах? Ведь если просто включить, то компоновщик не поймет, откуда они. Этот же вопрос интересует меня не только относительно программирования под Linux, но и для Windows. То есть как добавить в программу свои обектные файлы или собственные нестандартные библиотеки? Буду благодарен тем, кто мне ответит или укажет, где можно об этом прочитать.


> Со стандартными функциями, кажется, понятно: у компилятора где-то записано откуда они. А как быть с нестандартными?

Нету стандартных/нестандартных функций!

> Ведь если просто включить, то компоновщик не поймет, откуда они.

Просто включи заголовочный файл, в котором описан прототип функции.

Линковщик будет искать функцию по имени внутри объектных файлов, которые явно указаны при линковке. Если не найдет, то будет искать в библиотеках, перечисленных в опциях -l.

По умолчанию имеются "стандартные" библиотеки, которые не надо указывать явно (для gcc это libc, опция -lc передается компилятору неявно).

Die-Hard ★★★★★
()

> То есть как добавить в программу свои обектные файлы или собственные нестандартные библиотеки?

Несколько расшифрую ответ Die-Hard: допустим, есть основной объектный файл main.o, и к нему надо прилинковать другой объектный file.o и библиотеки libfoo.so и libbar.a, лежащие в /usr/local/lib. Ком.строка для линковки будет выглядеть так:

g++ main.o file.o -L/usr/local/lib -lfoo -lbar

> Буду благодарен тем, кто мне ответит или укажет, где можно об этом прочитать.

Есть документация в формате info. Вот команды для ее прочтения:

info gcc

info ld

> Этот же вопрос интересует меня не только относительно программирования под Linux, но и для Windows.

Для винды читай доку, идущую вместе с используемой тобой средой разработки.

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

"компоновка" - вражеское слово, которе использую только плохие переводчики и скверные преподаватели. Устоявшийся и широко используемый термин - "линковка".

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

Народ, вы можете писать - компоновка, ей богу, глаза режет.

anonymous (*) (31.01.2005 18:25:43)

Да да, меня аж выворачивает

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

> "компоновка" - вражеское слово, которе использую только плохие переводчики и скверные преподаватели. Устоявшийся и широко используемый термин - "линковка".

С точность да наоборот!

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

>> "компоновка" - вражеское слово, которе использую только плохие переводчики и скверные преподаватели. Устоявшийся и широко используемый термин - "линковка".

> С точность да наоборот!

Угу, а слово "директория" тебе ничего не режет? Наверное, ты предпочитаешь "папка"?

Понимаешь, компоновка -- слишком общий термин. Компоновка бывает, например, у танка, у веб сраниц. В компьютерах тоже бывает компоновка, например, "новая компоновка чипов на модулях памяти Kingston".

Поэтому слово "компоновка" используют, в основном, те, кто непрсредственно с линковкой программ сталкиваются редко.

А, вообще, совершенно дебильный спор. Называй, как тебе нравится.

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