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