Совмесная компиляция Си и FB

Предыдущая тема Следующая тема Перейти вниз

Совмесная компиляция Си и FB

Сообщение  tux в Сб Сен 13, 2008 2:57 pm

Наскока я понимаю процесс компиляции следующий:
1) код из синтаксиса ФБ транслируется в ассемблерный
2) полученый код компилится ассемблеровским компилятором в объектный файл
3) линкером полученый файл собирается с другими библиотеками, в которых реализованы все основные функции языка
Так вот эти библиоти используются при компиляции и сишных программ (вообще наскока я понимаю это и есть родные сишные библиотеки) + используются библиотеки, написанные специально для FB.
Поэтому возникла идея (и думаю многим она итересна) использовать куски программы написаные на Си, другие на FB, откомпилив их в объектные файлы и собрав. Помоему тут нет ничего сложного, единственное что останавливает, так ето отсутствие информации по процессу линкования.
fbc.exe автоматизирует процесс, делая одновременно компиляцию, и линковку с нужными библиотеками.
Получить только объектный файл мона получить с использованием ключа -c.
Наскока я понял, линкером является ld.exe который входит в дистрибутив FreeBASIC-а (в линуксе вродебы он используется вообще для сборки программ на всех языках).
Для начала я решил попробовать собрать хотябы только програмку на FB.
Код:
fbc -c test.bas
Получаю test.o (дальше все делаю из дирректории, в которой лежит компилятор)
Теперь беру ld.exe
с ключем -T lib\win32\i386pe.x указываем где валяется инструкция для линкера
после указываю свой файл test.o
Код:
bin\win32\ld.exe -T lib\win32\i386pe.x test.o
после чего линкер начинает ругаться на недостаток каких либо функций, после чего я практически методом тыка начал подбирать чего нехватает (при этом еще важно в каком порядке их записываем).
Долго етой фигней маялся, в итоге ниче хорошего из етого не вышло((
Если ктонить с етим сталкивался, подскажите как ето делать лучше (полюбому в сишке ето делается подобным образом)
avatar
tux

Сообщения : 365
Дата регистрации : 2008-04-06
Возраст : 28
Откуда : Сибирь

Посмотреть профиль http://tux.nsk.ru/

Вернуться к началу Перейти вниз

Re: Совмесная компиляция Си и FB

Сообщение  tux в Сб Сен 13, 2008 3:37 pm

Ну... я немного продвинулся в своих поисках.
Нашел у fbc ключик -v.
Во че мне он сказал:
Код:
FreeBASIC Compiler - Version 0.20.0 (08-10-2008) for win32 (target:win32)
Copyright (C) 2004-2008 The FreeBASIC development team.
Configured as standalone

compiling:    test.bas -o test.asm
assembling:  D:\share\fb\fb_0.20.0b\bin\win32\as.exe --32 --strip-local-absolute "test.asm" -o "test.o"
linking:      -T "D:\share\fb\fb_0.20.0b\lib\win32\i386pe.x" -subsystem console -s --stack 1048576,1048576 -L "D:\share\fb\fb_0.20.0b\lib\win32" -L "./" "D:\share\fb\fb_0.20.0b\lib\win32\crt2.o" "D:\share\fb\fb_0.20.0b\lib\win32\crtbegin.o" "test.o" -o "test.exe" -( -luser32 -lfb -lgcc -lmsvcrt -lkernel32 -lmingw32 -lmingwex -lmoldname -lsupc++ "D:\share\fb\fb_0.20.0b\lib\win32\fbrt0.o" -) "D:\share\fb\fb_0.20.0b\lib\win32\crtend.o"
где
Код:
compiling:    test.bas -o test.asm
он делает
Код:
fbc -r test.bas
где
Код:
assembling:  D:\share\fb\fb_0.20.0b\bin\win32\as.exe --32 --strip-local-absolute "test.asm" -o "test.o"
он делает
Код:
bin\win32\as.exe --32 --strip-local-absolute "test.asm" -o "test.o"
теоретически тут
Код:
linking:      -T "D:\share\fb\fb_0.20.0b\lib\win32\i386pe.x" -subsystem console -s --stack 1048576,1048576 -L "D:\share\fb\fb_0.20.0b\lib\win32" -L "./" "D:\share\fb\fb_0.20.0b\lib\win32\crt2.o" "D:\share\fb\fb_0.20.0b\lib\win32\crtbegin.o" "test.o" -o "test.exe" -( -luser32 -lfb -lgcc -lmsvcrt -lkernel32 -lmingw32 -lmingwex -lmoldname -lsupc++ "D:\share\fb\fb_0.20.0b\lib\win32\fbrt0.o" -) "D:\share\fb\fb_0.20.0b\lib\win32\crtend.o"
он должен делать
Код:
bin\win32\ld.exe -T "lib\win32\i386pe.x" -subsystem console -s --stack 1048576,1048576 -L "lib\win32" -L "./" "lib\win32\crt2.o" "lib\win32\crtbegin.o" "test.o" -o "test.exe" -( -luser32 -lfb -lgcc -lmsvcrt -lkernel32 -lmingw32 -lmingwex -lmoldname -lsupc++ "lib\win32\fbrt0.o" -) "lib\win32\crtend.o"
однако нехочет((
говорит
Код:
lib\win32/libmingw32.a(main.o):main.c:(.text+0x97): undefined reference to `WinMain@16'
странно...
будем искать
avatar
tux

Сообщения : 365
Дата регистрации : 2008-04-06
Возраст : 28
Откуда : Сибирь

Посмотреть профиль http://tux.nsk.ru/

Вернуться к началу Перейти вниз

Re: Совмесная компиляция Си и FB

Сообщение  tux в Сб Сен 13, 2008 3:51 pm

Ага!
Делаю так
Код:
fbc -C test.bas
(те копилю польностью, но не разрешаю удалять объектный файл)
Удаляю екзешник, и пытаюсь слинковать полученый объектный файл
Код:
bin\win32\ld.exe -T "lib\win32\i386pe.x" -subsystem console -s --stack 1048576,1048576 -L "lib\win32" -L "./" "lib\win32\crt2.o" "lib\win32\crtbegin.o" "test.o" -o "test.exe" -( -luser32 -lfb -lgcc -lmsvcrt -lkernel32 -lmingw32 -lmingwex -lmoldname -lsupc++ "lib\win32\fbrt0.o" -) "lib\win32\crtend.o"
и... все отлично компилится!
следовательно я непрально либо транслирую в ассемблер, либо компилю в объектный файл...
avatar
tux

Сообщения : 365
Дата регистрации : 2008-04-06
Возраст : 28
Откуда : Сибирь

Посмотреть профиль http://tux.nsk.ru/

Вернуться к началу Перейти вниз

Re: Совмесная компиляция Си и FB

Сообщение  tux в Сб Сен 13, 2008 5:50 pm

Усе, скомпилить получилось, объяняю по шагам:
1) транслируем в ассемблер
Код:
fbc -R test.bas
получаем *.exe и *.asm
2) компилируем
Код:
bin\win32\as.exe --32 --strip-local-absolute "test.asm" -o "test.o"
3) линкуем
Код:
bin\win32\ld.exe -T "lib\win32\i386pe.x" -subsystem console -s --stack 1048576,1048576 -L "lib\win32" -L "./" "lib\win32\crt2.o" "lib\win32\crtbegin.o" "test.o" -o "test.exe" -( -luser32 -lfb -lgcc -lmsvcrt -lkernel32 -lmingw32 -lmingwex -lmoldname -lsupc++ "lib\win32\fbrt0.o" -) "lib\win32\crtend.o"
Ща буду пытаться его подружить с сишкой...
avatar
tux

Сообщения : 365
Дата регистрации : 2008-04-06
Возраст : 28
Откуда : Сибирь

Посмотреть профиль http://tux.nsk.ru/

Вернуться к началу Перейти вниз

Re: Совмесная компиляция Си и FB

Сообщение  tux в Сб Сен 13, 2008 7:57 pm

Блин, фигово, оказывается существует куча форматов объектных файлов, поетому далеко не всегда получится задуманное, поетому выход использовать статические библиотеки (хотя вродебы их форматы тоже различаются)
avatar
tux

Сообщения : 365
Дата регистрации : 2008-04-06
Возраст : 28
Откуда : Сибирь

Посмотреть профиль http://tux.nsk.ru/

Вернуться к началу Перейти вниз

Re: Совмесная компиляция Си и FB

Сообщение  electrik в Пн Сен 15, 2008 5:50 pm

tux писал.
Блин, фигово, оказывается существует куча форматов объектных файлов, поетому далеко не всегда получится задуманное, поетому выход использовать статические
библиотеки (хотя вродебы их форматы тоже различаются)

ну да, не всё совместимо, но объектные файлы сделанные в gcc, должны работать. точно не припомню, еще в каком языке используется такой тип библиотек. знаю, что есть форматы
COFF, MS COFF(мелкомягких), а вот во FreeBasic или Gcc не помню. возможно, что это формат elf. это линуксовый формат, но покрайней мере FlatAssembler, при компиляции объектных файлов под Linux, подставляет расширение *.o. как я смотрел, внутренняя структура виндовых *.o компильнутых на FreeBasic или Gcc, и линуксовых сделанных на FlatAssembler- отличается. скорее всего, расширение это ни чего не значит, надо читать в инете про объектные файлы и с чем их едят. к стати, есть универсальный линковщик, alink
http://alink.sourceforge.net
может можно будет помиксовать объектые файлы, единственное, он вроде не поддерживает библиотеки MS COFF, а объектные файлы поддерживает.
насколько известно, что FlatAssembler, напрямую не боддерживает библиотеки типа *.lib, *.a, народ делал объектные файлы, импортировал заголовки, и линковал в alink.
таким образом, во FlatAssembler, подбирались к сишным библиотекам.

electrik

Сообщения : 394
Дата регистрации : 2008-09-02
Возраст : 36
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Совмесная компиляция Си и FB

Сообщение  ShenZN в Сб Сен 20, 2008 1:25 pm

Для добавления в список линкера объектного файла существует ключ -a

http://freebasic.justforum.net/forum-f10/tema-t71.htm

ShenZN

Сообщения : 155
Дата регистрации : 2008-02-18
Откуда : Ukraine

Посмотреть профиль http://lodestar-game.narod.ru

Вернуться к началу Перейти вниз

Re: Совмесная компиляция Си и FB

Сообщение  Спонсируемый контент


Спонсируемый контент


Вернуться к началу Перейти вниз

Предыдущая тема Следующая тема Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения