|
YAGARTO и math |
|
|
|
Jul 24 2009, 19:11
|

Профессионал
    
Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634

|
Гарантировать правильную работу floating point должен адеквтный стартап, но для того, чтобы перестал ругаться линкер отредактируйте в мэйкфайле строчку
MCFLAGS = -mcpu=$(MCU) -lm
Это заставит компилятор добавить к списку библиотечных файлов еще arm-elf\lib\libm.a
ps: ой, уже натовечали... А вопрошавший может сказать про то, заработало ли без поддержки стартапа? Как я понял, при компиляции для freestanding environment приходится свой собственный стартап подсовывать (я, во всяком случае, поступил именно так).
pps: успел сам проверить... коллосаль! у меня с моим стартапом заработало! Во всяком случае, функция sin (не в прерывании) работает... Правда, добавило 10 килобайт.
Сообщение отредактировал Genadi Zawidowski - Jul 24 2009, 19:46
|
|
|
|
|
Jul 25 2009, 06:54
|
Частый гость
 
Группа: Участник
Сообщений: 99
Регистрация: 22-03-07
Из: Novosibirsk
Пользователь №: 26 415

|
Цитата(klen @ Jul 25 2009, 01:22)  добавте при линковке ключик -lm Причем ключик должен быть обязательно после, а не до объектных файлов, в которых используются библиотечные функции.
|
|
|
|
|
Jul 27 2009, 07:23
|
Частый гость
 
Группа: Участник
Сообщений: 149
Регистрация: 17-05-07
Пользователь №: 27 787

|
Огромное спасибо! С ключом -lm все линкуется как надо. И, действительно, только когда ключ стоит после объектных файлов. (Если не сложно, объясните, почему так? Ведь если поменять порядок объектных файлов при линковке ничего не меняется?..)
Остался, правда, еще один непонятный момент еще на этапе компиляции: main.c: In function 'main': main.c:550: warning: implicit declaration of function 'sin' main.c:550: warning: incompatible implicit declaration of built-in function 'sin'
такая реакция на вызов функции, хотя я ее не определяю, просто вызываю, x=sin(y);
|
|
|
|
|
Jul 27 2009, 08:53
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(Атмег @ Jul 27 2009, 10:23)  И, действительно, только когда ключ стоит после объектных файлов. (Если не сложно, объясните, почему так? Ведь если поменять порядок объектных файлов при линковке ничего не меняется?..) потому что библиотека - это не объектный файл, а архив объектных файлов. И именно такой порядок описан в документации: Цитата -lnamespec --library=namespec ... The linker will search an archive only once, at the location where it is specified on the command line. If the archive defines a symbol which was undefined in some object which appeared before the archive on the command line, the linker will include the appropriate file(s) from the archive. However, an undefined symbol in an object appearing later on the command line will not cause the linker to search the archive again. ...
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|