Easyelectronics.ru

Электроника для всех
Текущее время: 23 авг 2019, 01:56

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 21 ] 
Автор Сообщение
 Заголовок сообщения: Создание статической библиотеки в Code::Blocks
СообщениеДобавлено: 16 фев 2014, 01:25 
Старожил
Аватара пользователя

Зарегистрирован: 29 май 2010, 18:46
Сообщения: 4189
Откуда: Киев
Переношу проекты с CCS на Codeblocks. Исходные проекты были рабочие.

Есть два проекта: один - обычный исполняемый МК-проект, второй - статическая библиотека (которая юзается первым).
Первый проект уже кагбэ и готов слинковаться, но ему не хватает точек входа в функции второго. Это понятно. Второй проект не хочет компилироваться в нужном (статическая библиотека) виде.
Что с ним за мотня получается:
- если поставить в Project -> Properties -> Build targets тип выходного файла "Console application", то библиотека компилируется, но нам же нужна библиотека!
При этом линкер вызывается такой строкой:

Код:
msp430-gcc.exe  -o bin\Debug\MB_LIB_cb12.elf obj\Debug\<file1>.o obj\Debug\<file2>.o ...  -Os -Wl,-gc-sections,-u,main -mmcu=msp430fr5726

и бодро сооПчает, что

Код:
Output file is bin\Debug\MB_LIB_cb12.elf with size 23.24 KB



- если ставлю в Project -> Properties -> Build targets "Static library", то линкер ругается.
При этом линкер вызывается такой строкой:

Код:
msp430-gcc.exe -rs bin\Debug\libMB_LIB_cb12.a obj\Debug\<file1>.o obj\Debug\<file2>.o ...

и дурным голосом орет, что

Код:
msp430-gcc.exe: error: bin\Debug\libMB_LIB_cb12.a: No such file or directory

Ну, директория есть, но файла libMB_LIB_cb12.a в ней нет. Но разве он не должен создаваться не этом шаге работы?

Смутно догадываюсь, что надо бы разобраться с ключами линкера, но не смог найти доходчивого материала ни по MSP430-GCC, ни по GCC.
Как вариант думаю: если в опциях линкера основного (первого) проекта указать, что все файлы библиотеки (второго проекта) входят в проект, то второй проект перестанет быть библиотекой, а будет просто набором исходников, лежащих в другом месте, но принадлежащих первому проекту. Это выход, в моем случае, но хотелось бы знать более правильный путь...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создание статической библиотеки в Code::Blocks
СообщениеДобавлено: 16 фев 2014, 01:42 
Старожил

Зарегистрирован: 03 мар 2010, 14:10
Сообщения: 1514
Откуда: Беларусь, Минск
Библиотека - это архив объектных файлов. То есть по простому делается так:
Код:
msp430-gcc -o code1.o code1.c
...
msp430-ar cru libmylib.a ./code1.o ...
msp430-ranlib libmylib.a
msp430-gcc -o project.elf ./main.o ... -lmylib


Поэтапно:
1. Компилируем исходники
2. Архивируем
3. Индексируем
4. Линкуем в проект

Индексацию и архивацию можно совместить
Код:
msp430-ar crus libmylib.a ./code1.o ...


Линковка для библиотеки невозможна. Видимо у вас вместо архиватора в настройках среды забит компилятор.


Последний раз редактировалось amx 16 фев 2014, 01:49, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создание статической библиотеки в Code::Blocks
СообщениеДобавлено: 16 фев 2014, 01:48 
Старожил

Зарегистрирован: 10 июн 2011, 23:01
Сообщения: 3268
если не секрет зачем собирать отдельные куски в статические библиотеки?
ну там если например libc еще можно как-то понять, он с компилятором вместе идёт, то вот модбас не проще в виде исходников подключать?
секунду на времени компиляции сэкономить?
а учитывая как зоопарк компиляторов * переносимость на разные платформы (там на ПК-то библиотеки собранные разными компиляторами тот еще геморрой, а для МК вообще мрак), так и то что компиляторы еще и довольно активно пилятся, то есть разные версии даже одного компилятора по генерируемому коду могут и отличаться, смысла иметь единожды собранную статическую библиотеку которую потом подключать к разным проектам особо не вижу.


Последний раз редактировалось _pv 16 фев 2014, 01:56, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создание статической библиотеки в Code::Blocks
СообщениеДобавлено: 16 фев 2014, 01:55 
Старожил
Аватара пользователя

Зарегистрирован: 29 май 2010, 18:46
Сообщения: 4189
Откуда: Киев
Я вижу, ты упроно ведешь меня к работе с мейкфайлом :) Да, это правильно, понять и быть независимым. Когда-то, лет 25 назад мейкфайлы были попроще, я там что-то делал...

amx писал(а):
То есть по простому делается так:

А как бы это запихнуть в Кодблокс, не подскажешь?

О, пока я дуплился с ответом, коллега _pv посмотрел ширше :)
Да, понимаешь, особого смысла нет. Я вот после открытия темы уже собрал проект именно так: просто подключив в основной проект все исходники либы. Мне это позволительно по той простой причине, что все функции "либы" я реально юзаю. То есть, вытягивать только востребованные фунции линкер все равно не будет. Поэтому да, можно и отказаться. Но понимать чуть больше хочется...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создание статической библиотеки в Code::Blocks
СообщениеДобавлено: 16 фев 2014, 02:13 
Старожил

Зарегистрирован: 03 мар 2010, 14:10
Сообщения: 1514
Откуда: Беларусь, Минск
Нет, что вы. Никуда я вас не толкают, просто рассказал, что происходит под капотом. Как это завести в КодБлоксе не знаю, никогда с ним дел не имел.

У библиотеки есть небольшой выигрыш по сравнению с ворохом файлов, это скорость линковки. Библиотека выигрывает за счёт наличия индекса. ИМХО библиотеки типа lwip лучше упаковать в библиотеку, т.к. правки таких библиотеки весьма нетривиальных и доступны не каждому. Так же структуру зависимостей проекта проще описывать при ручном создании мейкфайла (это я со своей колокольни).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создание статической библиотеки в Code::Blocks
СообщениеДобавлено: 16 фев 2014, 02:28 
Старожил
Аватара пользователя

Зарегистрирован: 29 май 2010, 18:46
Сообщения: 4189
Откуда: Киев
amx писал(а):
просто рассказал, что происходит под капотом. Как это завести в КодБлоксе не знаю, никогда с ним дел не имел.
А я играюсь с КБ только потому, что под Линуксом все же хочу именно с ним работать. CCS там не работоспособна, практически, Эклипс всегда остается как вариант, но как по мне, он слишком велик и могуч, а работать с редактором и мейкфайлом все же не так хорошо, как с КБ-ом, который еще и дебажить позволяет, хотя бы теоретически. Да и всякие удобства редактирования в проекте мне нравятся (сравниваю с виндозным Notepad++).
А пока вынужден сделать паузу в освоении Линукса, решил запустить все под виндой. И срочный проект по-быстрячку сбацаю, и потом легче будет в Линуксе настраивать тот же КБ.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создание статической библиотеки в Code::Blocks
СообщениеДобавлено: 16 фев 2014, 02:32 
Старожил
Аватара пользователя

Зарегистрирован: 29 май 2010, 18:46
Сообщения: 4189
Откуда: Киев
amx писал(а):
Линковка для библиотеки невозможна. Видимо у вас вместо архиватора в настройках среды забит компилятор.
В настройках проекта указан и компилятор, и линкер, и архиватор (Linker for static libs). И все это - msp430-gcc.exe. так что там только ключами все отличается. Вот я про ключи и спрашивал. Видно же в примере, что они разные для приложения и для либы...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создание статической библиотеки в Code::Blocks
СообщениеДобавлено: 16 фев 2014, 02:34 
Старожил

Зарегистрирован: 03 мар 2010, 14:10
Сообщения: 1514
Откуда: Беларусь, Минск
Воооот. Линкер для библиотек это msp430-ar, а ключи вроде в порядке. Попробуйте поменять.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создание статической библиотеки в Code::Blocks
СообщениеДобавлено: 16 фев 2014, 02:54 
Старожил
Аватара пользователя

Зарегистрирован: 29 май 2010, 18:46
Сообщения: 4189
Откуда: Киев
amx писал(а):
Попробуйте поменять.
Сработало!
Ух-ты-ж-ка, как говаривал мой сынок в детстве.

Теперь еще связать главный проект с этой либой...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создание статической библиотеки в Code::Blocks
СообщениеДобавлено: 16 фев 2014, 03:06 
Старожил
Аватара пользователя

Зарегистрирован: 29 май 2010, 18:46
Сообщения: 4189
Откуда: Киев
drvlas писал(а):
Теперь еще связать главный проект с этой либой...
Связался. Вродь как работает.
Но там при перенесении со Студии была куча ворнингов, нужно с ними разобраться, а потом можно и резюме по теме давать. Во всяком случае, снова хочу поблагодарить уважаемых коллег за наставления!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создание статической библиотеки в Code::Blocks
СообщениеДобавлено: 17 фев 2014, 12:15 
Старожил
Аватара пользователя

Зарегистрирован: 27 янв 2012, 17:24
Сообщения: 525
drvlas писал(а):
Я вижу, ты упроно ведешь меня к работе с мейкфайлом :) Да, это правильно, понять и быть независимым. Когда-то, лет 25 назад мейкфайлы были попроще, я там что-то делал...

Ничего там сложного нет.
Зато появляется уверенность, что "все идет по плану".
Вот, почитать.

Мне, чтобы скомпилить проект, достаточно просто вбить в консольке make all.
Чтобы прошить, make program, забил отдельной целью запуск msp430-bsl


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создание статической библиотеки в Code::Blocks
СообщениеДобавлено: 17 фев 2014, 12:47 
Старожил
Аватара пользователя

Зарегистрирован: 29 май 2010, 18:46
Сообщения: 4189
Откуда: Киев
MrYuran писал(а):
Вот, почитать.
По-людски написано! Спасибо! С трудом оторвался, ибо сейчас некогда насладиться :)

Но все же не ясна дилемма "make vs IDE".
Во-первых, если работать с make, то нужен хороший редактор. Есть такие, чтобы обеспечивали всякие плюшки, привычные в IDE? Ну, там всякие подсветки, всплывающие окна с дефинициями и прочая...
И потом, нужен загрузчик. Его тоже вызывать из make - как ты вызываешь msp430-bsl? А отладчик же вообще не пришей к п*зде рукав, верно? То есть пошагово чьонить проверить уже йок?

Во-вторых, применительно у Кодблокс. Я вот смотрю, некоторые IDE используют makefile, а в Кодблокс вообще его не вижу в директориях проекта. До этого думал, что понимаю: то ли Студия сделеат свой makefile, то ли мы сварганим внешний (где-то там в настройках есть указание внешнего). А с Кодблокс, выходит, все не так?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создание статической библиотеки в Code::Blocks
СообщениеДобавлено: 17 фев 2014, 13:56 
Старожил
Аватара пользователя

Зарегистрирован: 27 янв 2012, 17:24
Сообщения: 525
drvlas писал(а):
MrYuran писал(а):
Вот, почитать.
По-людски написано! Спасибо! С трудом оторвался, ибо сейчас некогда насладиться :)

Но все же не ясна дилемма "make vs IDE".
Во-первых, если работать с make, то нужен хороший редактор. Есть такие, чтобы обеспечивали всякие плюшки, привычные в IDE? Ну, там всякие подсветки, всплывающие окна с дефинициями и прочая...

ЕМНИП, как раз C::B отлично все раскрашивает.
Мало того, работает контекстный поиск и прочие навороты. (хотя, возможно, с клипсой спутал)
Ещё есть классный блокнотик Scintilla (я пользуюсь локальным SciTE)
Цитата:
И потом, нужен загрузчик. Его тоже вызывать из make - как ты вызываешь msp430-bsl?

Код:
program:
   load.bat $(TARGET).elf

Что характерно, таргет уже известен, туда же только что компилили.
С отладкой отдельная песня, я лично не пользуюсь, поэтому ничего конкретного не скажу.
Есть mspdebug, есть в C::B поддержка GDB, надо их подружить. В принципе, прошивать оттуда же можно.
Цитата:
Во-вторых, применительно у Кодблокс. Я вот смотрю, некоторые IDE используют makefile, а в Кодблокс вообще его не вижу в директориях проекта. До этого думал, что понимаю: то ли Студия сделеат свой makefile, то ли мы сварганим внешний (где-то там в настройках есть указание внешнего). А с Кодблокс, выходит, все не так?

Кодеблокс делает локальные субмейки (.mk) в директориях проекта, а потом собирает их в корневом.
Но можно в свойствах проекта сразу указать makefile-based (или что-то в этом роде) и делать все как у людей :)

Это просто дополнительная степень свободы, не зависеть от разной разноцветной шелухи


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создание статической библиотеки в Code::Blocks
СообщениеДобавлено: 17 фев 2014, 14:33 
Старожил

Зарегистрирован: 03 мар 2010, 14:10
Сообщения: 1514
Откуда: Беларусь, Минск
MrYuran писал(а):
Код:
program:
   load.bat $(TARGET).elf

Я обычно делаю так
Код:
program: $(TARGET).elf
   load.bat $<

Это позволяет быть уверенным, что прошивается самая последняя сборка, даже если её ещё не собрали.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создание статической библиотеки в Code::Blocks
СообщениеДобавлено: 18 фев 2014, 11:23 
Старожил
Аватара пользователя

Зарегистрирован: 27 янв 2012, 17:24
Сообщения: 525
amx писал(а):
Я обычно делаю так
Код:
program: $(TARGET).elf
   load.bat $<

Это позволяет быть уверенным, что прошивается самая последняя сборка, даже если её ещё не собрали.

Ок, поправлю.
Идем дальше:

.PHONY: program

:)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создание статической библиотеки в Code::Blocks
СообщениеДобавлено: 18 фев 2014, 11:59 
Старожил
Аватара пользователя

Зарегистрирован: 29 май 2010, 18:46
Сообщения: 4189
Откуда: Киев
MrYuran писал(а):
.PHONY: program
:)
Приколисты, йолы-палы. Нет, чтобы тупому ТС рассказать доходчиво, как создать инструментарий для работы с мсп430 под линем... Каждый раз, запуская винду для работы с моими любимыми фрам-МК, испытываю стыд :(


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создание статической библиотеки в Code::Blocks
СообщениеДобавлено: 18 фев 2014, 12:38 
Старожил
Аватара пользователя

Зарегистрирован: 27 янв 2012, 17:24
Сообщения: 525
drvlas писал(а):
Приколисты, йолы-палы. Нет, чтобы тупому ТС рассказать доходчиво, как создать инструментарий для работы с мсп430 под линем... Каждый раз, запуская винду для работы с моими любимыми фрам-МК, испытываю стыд :(

Сами буквально токошто разобрались, как толстым МСПшкам в верхнюю память пихать..

Кстати, у меня официальный красношляпотехасский GCC4.8.0 чудит нипадецки.. Данные вместо .infomem расположил в 0x072A, и не спихнешь ничем..
колхозный mspgcc-20120911-experimental с mspgcc.sf.net после нескольких пинков таки завелся..


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создание статической библиотеки в Code::Blocks
СообщениеДобавлено: 18 фев 2014, 15:48 
Старожил
Аватара пользователя

Зарегистрирован: 27 янв 2012, 17:24
Сообщения: 525
Могу разобрать по косточкам личный типовой makefile, если интересно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создание статической библиотеки в Code::Blocks
СообщениеДобавлено: 18 фев 2014, 16:49 
Старожил
Аватара пользователя

Зарегистрирован: 29 май 2010, 18:46
Сообщения: 4189
Откуда: Киев
MrYuran писал(а):
Могу разобрать по косточкам личный типовой makefile, если интересно.
Безусловно. Даже в Сообществе такой разбор не был бы лишним.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создание статической библиотеки в Code::Blocks
СообщениеДобавлено: 19 фев 2014, 17:46 
Старожил
Аватара пользователя

Зарегистрирован: 27 янв 2012, 17:24
Сообщения: 525
drvlas писал(а):
Безусловно. Даже в Сообществе такой разбор не был бы лишним.

ОК, done


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создание статической библиотеки в Code::Blocks
СообщениеДобавлено: 19 фев 2014, 18:05 
Старожил

Зарегистрирован: 15 янв 2013, 13:24
Сообщения: 5665
MrYuran писал(а):
ОК, done
Хорошо получилось imho. Новичкам тоже должно понравиться.
Только, может быть, не стоило помещать статью именно в рубрику MSP430? Слишком специфичное место для такой универсальной темы, меньше читателей её там найдут.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 21 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB