ViKo 0 Posted July 7, 2020 · Report post Есть у меня задание добавить кое-каких функций к чужому проекту. Я могу дать отлаженные исходники. Но подумал, почему бы не дать готовую библиотеку xx.lib? Тогда свои идеи останутся скрытыми, правильно? Дизассемблировать - не возражаю, там нет гениальных решений. Задать в проекте создать библиотеку. Что нужно еще передать? Каким образом описывать параметры функций - xx.h передавать? Как эта библиотека расположится в выходном двоичном файле? Никогда библиотеку не делал. Поделитесь опытом. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
haker_fox 0 Posted July 7, 2020 · Report post 15 minutes ago, ViKo said: Каким образом описывать параметры функций - xx.h передавать? Да. Иначе на этапе компиляции компилятор ругнётся, что функции не существует. 16 minutes ago, ViKo said: Как эта библиотека расположится в выходном двоичном файле? Насколько я понимаю, библиотека что-то типа объектного файла. Без привязки к конкретным адресам. Таким образом, линковщик займётся её размещением в исполняемом файле. Я делал давно библиотеку под ИАРом, правда, но, думаю, суть остаётся одна и та же. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
ViKo 0 Posted July 7, 2020 · Report post 1 минуту назад, haker_fox сказал: Да. Иначе на этапе компиляции компилятор ругнётся, что функции не существует. То есть, вместе с **.lib передавать заказчику **.h? Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
haker_fox 0 Posted July 7, 2020 · Report post 11 minutes ago, ViKo said: То есть, вместе с **.lib передавать заказчику **.h? Совершенно верно. Ведь компилятору нужна информация о прототипах используемых функций. Наличие исходника с функцией ему не важно, т.к. сборкой кода занимается линковщик. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
ViKo 0 Posted July 7, 2020 · Report post Еще один вопрос задам "для осознанья и просветленья". Компилятор всегда создаёт перемещаемый код, с относительной адресацией? Или есть способ задать конкретные адреса? Может, так (абс. адр.) эффективнее код получается? Или при линковке адресация может измениться на абсолютную? Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
haker_fox 0 Posted July 7, 2020 · Report post 5 minutes ago, ViKo said: Или есть способ задать конкретные адреса? Для данных - да. Но как уже ни раз обсуждалось на форуме, делать это следует осознанно и в крайних случаях. 6 minutes ago, ViKo said: Компилятор всегда создаёт перемещаемый код, с относительной адресацией? Насколько мне известно, да. За исключением принудительного способа сказать ему об этом с помощью "пргам" и прочих ключевых слов. 7 minutes ago, ViKo said: Может, так (абс. адр.) эффективнее код получается? А за счёт чего? 7 minutes ago, ViKo said: Или при линковке адресация может измениться на абсолютную? Вроде как адресами всегда линковщик заведует. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
ViKo 0 Posted July 7, 2020 · Report post 2 минуты назад, haker_fox сказал: А за счёт чего? За счет команд, использующих абсолютные адреса. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
haker_fox 0 Posted July 7, 2020 · Report post 6 minutes ago, ViKo said: За счет команд, использующих абсолютные адреса. Ой, я вас неправильно понял. Считайте, что я на этот вопрос вам не отвечал))) Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
toweroff 0 Posted July 7, 2020 · Report post Передаваемая библиотека, на мой взгляд, должна быть перемещаемой, т.к. неизвестно, где функции оттуда будут размещены Или заранее оговаривать с заказчиком диапазон адресов Библиотека просто включается в проект Keil, в исходниках - хидеры, которые опишут все функции Не помню точно, делал ли в хидерах просто void foo(void); или добавлял extern Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
ViKo 0 Posted July 7, 2020 · Report post 8 минут назад, toweroff сказал: Не помню точно, делал ли в хидерах просто void foo(void); или добавлял extern Функциям extern не нужен, они в глобальном пространстве имён в C. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Forger 0 Posted July 7, 2020 · Report post Вот тут подробно все изложено )) Для сборки финального проекта, использующего либу, нужен только lib файл и соотв. h-файл/файлы. Версия компилятора должна совпадать (минорная часть версии может отличаться, т.е. либы от v5 и v6 компиляторов несовместимы), также должны совпадать опции компилятора (кроме уровня оптимизации, это как раз некритично) с опциями в проекте, где будет использоваться эта либа. По сути: либа это просто "склейка" obj-файлов (*.d а вообще где как), получаемых после компиляции. Типа упрощенный архив так сказать. Ее делает линкер. Этот же линкер умеет разбирать эту сборку обратно и уже собирать кучу obj- файлов в финальную прошивку. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
ViKo 0 Posted July 7, 2020 · Report post 10 минут назад, Forger сказал: Вот тут подробно все изложено )) Спасибо и за это. Меня интересовали советы практиков. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Forger 0 Posted July 7, 2020 · Report post Just now, ViKo said: Спасибо и за это. Меня интересовали советы практиков. Читайте выше, добавил практические советы. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
ViKo 0 Posted July 7, 2020 · Report post 32 минуты назад, Forger сказал: также должны совпадать опции компилятора (кроме уровня оптимизации, это как раз некритично) с опциями в проекте Какие опции важны? Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Forger 0 Posted July 7, 2020 · Report post 12 minutes ago, ViKo said: Какие опции важны? Не знаю точно, такой задачи не ставил. Просто делал одинаково с проектом. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...