Jump to content

    

Keil, Create Library

Recommended Posts

ViKo

Есть у меня задание добавить кое-каких функций к чужому проекту. Я могу дать отлаженные исходники. Но подумал, почему бы не дать готовую библиотеку xx.lib? Тогда свои идеи останутся скрытыми, правильно? Дизассемблировать - не возражаю, там нет гениальных решений.

Задать в проекте создать библиотеку. Что нужно еще передать? Каким образом описывать параметры функций - xx.h передавать? Как эта библиотека расположится в выходном двоичном файле?
Никогда библиотеку не делал. Поделитесь опытом. 

Share this post


Link to post
Share on other sites

haker_fox
15 minutes ago, ViKo said:

Каким образом описывать параметры функций - xx.h передавать?

Да. Иначе на этапе компиляции компилятор ругнётся, что функции не существует.

16 minutes ago, ViKo said:

Как эта библиотека расположится в выходном двоичном файле?

Насколько я понимаю, библиотека что-то типа объектного файла. Без привязки к конкретным адресам. Таким образом, линковщик займётся её размещением в исполняемом файле.

Я делал давно библиотеку под ИАРом, правда, но, думаю, суть остаётся одна и та же.

Share this post


Link to post
Share on other sites

ViKo
1 минуту назад, haker_fox сказал:

Да. Иначе на этапе компиляции компилятор ругнётся, что функции не существует.

 

То есть, вместе с **.lib передавать заказчику **.h?

Share this post


Link to post
Share on other sites

haker_fox
11 minutes ago, ViKo said:

То есть, вместе с **.lib передавать заказчику **.h?

Совершенно верно. Ведь компилятору нужна информация о прототипах используемых функций. Наличие исходника с функцией ему не важно, т.к. сборкой кода занимается линковщик.

Share this post


Link to post
Share on other sites

ViKo

Еще один вопрос задам "для осознанья и просветленья". Компилятор всегда создаёт перемещаемый код, с относительной адресацией? Или есть способ задать конкретные адреса? Может, так (абс. адр.) эффективнее код получается? Или при линковке адресация может измениться на абсолютную?

Share this post


Link to post
Share on other sites

haker_fox
5 minutes ago, ViKo said:

Или есть способ задать конкретные адреса?

Для данных - да. Но как уже ни раз обсуждалось на форуме, делать это следует осознанно и в крайних случаях.

6 minutes ago, ViKo said:

Компилятор всегда создаёт перемещаемый код, с относительной адресацией?

Насколько мне известно, да. За исключением принудительного способа сказать ему об этом с помощью "пргам" и прочих ключевых слов.

7 minutes ago, ViKo said:

Может, так (абс. адр.) эффективнее код получается?

А за счёт чего?

7 minutes ago, ViKo said:

 Или при линковке адресация может измениться на абсолютную?

Вроде как адресами всегда линковщик заведует.

Share this post


Link to post
Share on other sites

ViKo
2 минуты назад, haker_fox сказал:

А за счёт чего?

За счет команд, использующих абсолютные адреса.

Share this post


Link to post
Share on other sites

haker_fox
6 minutes ago, ViKo said:

За счет команд, использующих абсолютные адреса.

Ой, я вас неправильно понял. Считайте, что я на этот вопрос вам не отвечал)))

Share this post


Link to post
Share on other sites

toweroff

Передаваемая библиотека, на мой взгляд, должна быть перемещаемой, т.к. неизвестно, где функции оттуда будут размещены

Или заранее оговаривать с заказчиком диапазон адресов

Библиотека просто включается в проект Keil, в исходниках - хидеры, которые опишут все функции

Не помню точно, делал ли в хидерах просто void foo(void); или добавлял extern

Share this post


Link to post
Share on other sites

ViKo
8 минут назад, toweroff сказал:

Не помню точно, делал ли в хидерах просто void foo(void); или добавлял extern

Функциям extern не нужен, они в глобальном пространстве имён в C.

Share this post


Link to post
Share on other sites

Forger

Вот тут подробно все изложено ))

 

Для сборки финального проекта, использующего либу, нужен только lib файл и соотв. h-файл/файлы.

Версия компилятора должна совпадать (минорная часть версии может отличаться, т.е. либы от v5 и v6 компиляторов несовместимы),

также должны совпадать опции компилятора (кроме уровня оптимизации, это как раз некритично) с опциями в проекте, где будет использоваться эта либа.

 

По сути: либа это просто "склейка" obj-файлов (*.d а вообще где как), получаемых после компиляции. Типа упрощенный архив так сказать. Ее делает линкер.

Этот же линкер умеет разбирать эту сборку обратно и уже собирать кучу obj- файлов в финальную прошивку.

Share this post


Link to post
Share on other sites

ViKo
10 минут назад, Forger сказал:

Вот тут подробно все изложено ))

 

Спасибо и за это. Меня интересовали советы практиков.

Share this post


Link to post
Share on other sites

ViKo
32 минуты назад, Forger сказал:

также должны совпадать опции компилятора (кроме уровня оптимизации, это как раз некритично) с опциями в проекте

Какие опции важны?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.