![]() |
|
Модераторы: Poseidon |
![]()
|
|
| Letov |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 321 Регистрация: 22.2.2007 Где: Санкт-Петербург Репутация: 4 Всего: 4 |
Доброго времени суток! Недавно достал одну книжечку по написанию операционных систем, где встретил такой код
kernel.c
handlers.c
intslib.c
Ошибка имеет вид: Undefined reference to 'irq_timer' Undefined reference to 'irq_keyboard' Undefined reference to 'irq_timer' Подскажите, пожалуйста, как избавиться от данной ошибки (sarry за нубский вопрос=). Код, по идее, должен быть правильным, но ошибка "на лицо". Пользуюсь для компиляции gcc. Линкую с помощью ld. Скорее всего ошибку дает он! Заранее спасибо! Это сообщение отредактировал(а) Letov - 30.5.2008, 22:29 -------------------- Не бывает плохих языков программирования. Бывают плохие программисты... |
||||||
|
|||||||
| opjox |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 17.1.2008 Репутация: 11 Всего: 14 |
Нигде не вижу объявление irq_timer и irq_keyboard
|
|||
|
||||
| Letov |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 321 Регистрация: 22.2.2007 Где: Санкт-Петербург Репутация: 4 Всего: 4 |
Так это понятно, но я тут немного разобрался и получилось: gcc компилит без ошибок, а вот ld линкер выдает эти ошибки. Я пытаюсь линкером объединить несколько файлов с параметром -Ttext 0x200000.
-------------------- Не бывает плохих языков программирования. Бывают плохие программисты... |
|||
|
||||
| opjox |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 17.1.2008 Репутация: 11 Всего: 14 |
Извиняюсь, ступил – не посмотрел на реализацию макроса. Кстати, ошибка в нем, точнее от его использования. Для простоты объяснения, я опущу строку в макросе с ассемблерной вставкой, т.е. преобразую к следующему виду:
Теперь рассмотрим, что получим от такого вызова:
После обработки кода препроцессором мы получим такой код:
Выходит, что у нас после этого есть только объявленный прототип функции func и нигде нет ее реализации, а также _irq_timer (объявленная и определенная) А позже мы пытаемся узнать адрес несуществующей функции &irq_timer в 76 строчке. Как именно подправить эти ошибки зависит от того, что вы в итоге хотите получить. |
||||||
|
|||||||
| Letov |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 321 Регистрация: 22.2.2007 Где: Санкт-Петербург Репутация: 4 Всего: 4 |
В том то и дело, что когда компилирую через gcc - ни одной ощибки нету, а вот когда линкую с другими бинарниками - вылезает ошибка (в прикрепленном файле). Т.е. компилятор нормально реагирует на макрос, а вот линкер на полученный бинарник - нет.
А получить мне нужно обработчик прерывания irq1 и irq0, который функцией i_install() заносится в таблицу прерываний. Может надо так:
Присоединённый файл ( Кол-во скачиваний: 10 )
_______1.png 5,62 Kb-------------------- Не бывает плохих языков программирования. Бывают плохие программисты... |
|||
|
||||
| Letov |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 321 Регистрация: 22.2.2007 Где: Санкт-Петербург Репутация: 4 Всего: 4 |
Все, спасибо за отет. Разобрался! Дело вроде в макросе:
Это сообщение отредактировал(а) Letov - 1.6.2008, 13:10 -------------------- Не бывает плохих языков программирования. Бывают плохие программисты... |
|||
|
||||
![]()
|
| Правила форума "Центр помощи" | |
|
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Центр помощи | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |