Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: mspgcc линковка libm.a
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > GNU/OpenSource средства разработки
MrYuran
Суть проблемы в следующем.
Нужно прилинковать к проекту библиотеку libm.a
Работаю в Eclipse + ZilinCDT
обычно в проекте стоит автомэйк, в свойствах проекта указываю путь к библиотеке и ключ линкера -lm.
Всё ок, не считая что вместо log() почему-то прокатывает только logf().
В проекте scmRTOS (AHTOXA@ mspgcc Edition) такой номер не проходит, автомэйком он не собирается, только мэйк-файлом из scmRTOS.
ТАК ВОТ: немогу никак подключить libm.a к этому мэйку!
никак не подключается!
уж как только не пробовал!
То путь не найден (непонятно до чего), то log() андефайнед

PS: хотел файл прикрепить, а он не хочет чего-то

обозвал txt, прикрепился: Нажмите для просмотра прикрепленного файла
MrYuran
Я вот что ещё подумал - в math.h стоит #ifndef _чё_то_там_ перед каждым блоком фунцкий, а определения дефайнов непонятно где. Может здесь собака повалялась?

то есть дефайны определены неправильно и заголовки библиотечных функций не подключаются
MrYuran
Ещё вот такая штука
Нажмите для просмотра прикрепленного файла
Чё там за голубые галочки (пометил стрелками)
раньше их вроде не было
msalov
Попробуйте явно задать пути к библиотекам линкеру:
Код
ldflags += -Wl,-L"C:\mspgcc\msp430\lib"

Примерно так, только убедитесь в правильности пути
MrYuran
Ну вот блин... допрыгался.
Чё-то отломил.
теперь и без логарифма не работает.
Код
**** Build of configuration Release for project scmRTOSproba ****

make -k -j1
--- compiling ../Measure/measure.cpp...
../Measure/measure.cpp: In function `float ChargeCap()':
../Measure/measure.cpp:130: warning: unused variable `float i'
../Measure/measure.cpp: At top level:
../Measure/measure.cpp:63: warning: `float Delta' defined but not used
--- linking...
msp430-ld: region text is full (../exe/scmrtos-1-EventFlag.elf section .text)
msp430-ld: region data is full (../exe/scmrtos-1-EventFlag.elf section .data)
msp430-ld: address 0x55e of ../exe/scmrtos-1-EventFlag.elf section .bss is not within region data
make: *** [../exe/scmrtos-1-EventFlag.elf] Error 1
make: Target `all' not remade because of errors.


Вроде восстановил, но log и logf категорически не приемлет:
Код
ldflags     := -mmcu=$(cpu)-Wl,-L"C:\mspgcc\msp430\lib\msp1"-lm
ldflags        += -Wl,-Map=$(mapfile),--cref -Wl,-T$(cfg_dir)/msp430x149.x

кстати, зачем нужен ключ -Wl ? изменение порядка ключей вызывает секшн оверлэп
Код
make -k -j1
--- linking...
../debug/measure.o: In function `CapMeas()':
/cygdrive/e/work/.../Project/scmRTOSproba/1-EventFlag/../Measure/measure.cpp:179: undefined reference to `logf'
make: *** [../exe/scmrtos-1-EventFlag.elf] Error 1
make: Target `all' not remade because of errors.
msalov
Цитата(MrYuran @ Apr 23 2008, 09:34) *
кстати, зачем нужен ключ -Wl ? изменение порядка ключей вызывает секшн оверлэп
Код
make -k -j1
--- linking...
../debug/measure.o: In function `CapMeas()':
/cygdrive/e/work/.../Project/scmRTOSproba/1-EventFlag/../Measure/measure.cpp:179: undefined reference to `logf'
make: *** [../exe/scmrtos-1-EventFlag.elf] Error 1
make: Target `all' not remade because of errors.
При испоьзовании gcc для вызова линкера, параметры линкера передаются через конструкцию вида
Код
-Wl,<linkerflag>
, ассемблеру
Код
-Wa,<assflag>
MrYuran
math.h тоже похоже ни при чём,
объявляю в явном виде
extern float logf _PARAMS((float));
- результат не меняется

А может быть разница из-за того что С++ всесто С?
msalov
Цитата(MrYuran @ Apr 23 2008, 10:17) *
math.h тоже похоже ни при чём,
объявляю в явном виде
extern float logf _PARAMS((float));
- результат не меняется

А может быть разница из-за того что С++ всесто С?

При использовании в С++, функции С должны быть обьявлены
Код
extern "C" {
// тут обьявление функций
}
Сергей Борщ
Цитата(MrYuran @ Apr 23 2008, 09:34) *
Код
ldflags     := -mmcu=$(cpu)-Wl,-L"C:\mspgcc\msp430\lib\msp1"-lm
ldflags        += -Wl,-Map=$(mapfile),--cref -Wl,-T$(cfg_dir)/msp430x149.x
В первой строчке необходим пробел после $(cpu) и запятая или конструкция "-Wlзапятая" перед -lm
MrYuran
Цитата(Сергей Борщ @ Apr 23 2008, 10:43) *
В первой строчке необходим пробел после $(cpu) и запятая или конструкция "-Wlзапятая" перед -lm

Да уж как только не менял... и местами, и запятые, и пробелы...
Проще по-моему нацти исходник логарифма и вставить в программу.
Кстати о птичках: может есть у кого?
Да , и ещё pow (возведение в степень)
msalov
Цитата(MrYuran @ Apr 23 2008, 10:52) *
Да уж как только не менял... и местами, и запятые, и пробелы...
Проще по-моему нацти исходник логарифма и вставить в программу.
Кстати о птичках: может есть у кого?
Да , и ещё pow (возведение в степень)

log: http://mspgcc.cvs.sourceforge.net/mspgcc/m...amp;view=markup
pow: http://mspgcc.cvs.sourceforge.net/mspgcc/m...amp;view=markup
MrYuran
Во, совсем другое дело!
Код
--- linking...
--- making hex...
--- generating listing...
   text       data        bss        dec        hex    filename
  13394        790         72      14256       37b0    ../exe/scmrtos-1-EventFlag.elf
"Errors: none"

И как я раньше не додумался...
Тормоз, одним словом
Цитата

Спасибо!!! beer.gif beer.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.