Перейти к содержанию
    

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

15 minutes ago, ViKo said:

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

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

16 minutes ago, ViKo said:

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 minutes ago, ViKo said:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 minutes ago, ViKo said:

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

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

6 minutes ago, ViKo said:

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

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

7 minutes ago, ViKo said:

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

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

7 minutes ago, ViKo said:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 minutes ago, ViKo said:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

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

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

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

Just now, ViKo said:

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

Читайте выше, добавил практические советы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12 minutes ago, ViKo said:

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

Не знаю точно, такой задачи не ставил. Просто делал одинаково с проектом.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...