Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Линковка C функций в C++(казусы при линковке всего этого с ассемблером)

63K
05 ноября 2013 года
Max1548
13 / / 10.12.2011
Всем доброго времени суток.
Есть 3 файла: gdt.h; init.cpp; boot.S

В boot.S:

 
Код:
.global gdt_flush
gdt_flush:
В gdt.h:

 
Код:
extern void gdt_flush(u32int);
В init.cpp: просто вызов gdt_flush'a.

Проблемы идут с линковкой, в принципе причина ясна, при компиляции С++ накладывает манглинг(или как-то так называется), в связи с чем линкер не может
найти такую вот абракадабру(пример): %@%%#t_fl@us%#. Что надо поставить перед функцией в файле gdt.h, чтобы она линковалась без манглинга?

compile.sh
 
Код:
cd boot
i568-elf-as -o boot.o boot.S
cd ..
i586-elf-g++ -c init.cpp -o init.o -ffreestanding -O2 -Wall -Wextra -fno-exceptions -fno-rtti              
i586-elf-g++ -T linker.ld -o myos.bin -ffreestanding -nostdlib -O2 boot/boot.o init.o
7
05 ноября 2013 года
@pixo $oft
3.4K / / 20.09.2006
В MAsm'е была опция, ответственная за соглашения о вызовах, и если выбрать stdcall, то эта проблема уходит. Как-то так, могу немного ошибаться, но дома проверю.
11K
05 ноября 2013 года
xAtom
65 / / 17.01.2011
extern "C" void gdt_flush(u32int);
63K
05 ноября 2013 года
Max1548
13 / / 10.12.2011
Цитата: xAtom
extern "C" void gdt_flush(u32int);



Спасибо, помогло.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог