FreeBasic
Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.

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

Участников: 3

Перейти вниз

Совмесная компиляция Си и FB Empty Совмесная компиляция Си и 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
после чего линкер начинает ругаться на недостаток каких либо функций, после чего я практически методом тыка начал подбирать чего нехватает (при этом еще важно в каком порядке их записываем).
Долго етой фигней маялся, в итоге ниче хорошего из етого не вышло((
Если ктонить с етим сталкивался, подскажите как ето делать лучше (полюбому в сишке ето делается подобным образом)
tux
tux

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

http://tux.nsk.ru/

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

Совмесная компиляция Си и FB Empty 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'
странно...
будем искать
tux
tux

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

http://tux.nsk.ru/

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

Совмесная компиляция Си и FB Empty 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"
и... все отлично компилится!
следовательно я непрально либо транслирую в ассемблер, либо компилю в объектный файл...
tux
tux

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

http://tux.nsk.ru/

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

Совмесная компиляция Си и FB Empty 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"
Ща буду пытаться его подружить с сишкой...
tux
tux

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

http://tux.nsk.ru/

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

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

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

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

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

http://tux.nsk.ru/

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

Совмесная компиляция Си и FB Empty 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

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

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

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

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

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

https://freebasic.forum2x2.ru/forum-f10/tema-t71.htm

ShenZN

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

http://lodestar-game.narod.ru

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

Вернуться к началу

- Похожие темы

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