| 
					| haav | Дата: Понедельник, 17.09.2012, 09:28 | Сообщение # 1 |  |  Генералиссимус Группа: Администраторы Сообщений: 1436 Статус: Offline | Для тех кто неплохо знает ассемблер, есть возможность скомпилировать исходный код FreeBasic в ASM исходник и подправить по своему усмотрению, а впоследствии его скомпилировать в приложение. С данным вопросом помог electrik. Обсуждалась данная тема ЗДЕСЬ, но я решил создать отдельную тему, дабы при случае можно было легко найти. 
 И так для того чтобы создать ASM листинг из файла BAS , нужно компилятору передать параметры:
 
 
 
 Где ключ -R как раз нужен для того , чтобы сохранить ASM файл , а ключ -V для того чтобы подсмотреть все параметры компиляции для будующего создания приложения.
 
 В окне консоли выводится примерно следующее:
 
 
 Код D:\Freebasic\fbedit\Projects\MyProject\Классные примеры на FreeBasic\Другие поле зности\Создание ASM а потом в EXE>fbc -R test.bas -v
 FreeBASIC Compiler - Version 0.24.0 (08-19-2012) for win32
 Copyright (C) 2004-2012 The FreeBASIC development team.
 standalone, objinfo (libbfd 217)
 compiling:    test.bas -o test.asm (main module)
 assembling:   D:\Freebasic\fbedit\Compilier\bin\win32\as.exe --32 --strip-local-
 absolute "test.asm" -o "test.o"
 linking:      D:\Freebasic\fbedit\Compilier\bin\win32\ld.exe -o "test.exe" -subs
 ystem console "D:\Freebasic\fbedit\Compilier\lib\win32\fbextra.x" --stack 104857
 6,1048576 -s -L "D:\Freebasic\fbedit\Compilier\lib\win32" -L "." "D:\Freebasic\f
 bedit\Compilier\lib\win32\crt2.o" "D:\Freebasic\fbedit\Compilier\lib\win32\crtbe
 gin.o" "D:\Freebasic\fbedit\Compilier\lib\win32\fbrt0.o" "test.o" "-(" -luser32
 -lfb -lgcc -lmsvcrt -lkernel32 -lmingw32 -lmingwex -lmoldname -lsupc++ "-)" "D:\
 Freebasic\fbedit\Compilier\lib\win32\crtend.o"
 
 D:\Freebasic\fbedit\Projects\MyProject\Классные примеры на FreeBasic\Другие поле
 зности\Создание ASM а потом в EXE>pause
 Для продолжения нажмите любую клавишу . . .
 Далее ASM файл редактируется по своему усмотрению и наконец сама компиляция в EXE:
 
 Создаем CMD файл с содержанием, которое мы увидели при создании ASM листинга:
 
 
 Код D:\Freebasic\fbedit\Compilier\bin\win32\as.exe --32 --strip-local-absolute "test.asm" -o "test.o" ld.exe -o "test.exe" -subsystem console "D:\Freebasic\fbedit\Compilier\lib\win32\fbextra.x" --stack 1048576,1048576 -s -L "D:\Freebasic\fbedit\Compilier\lib\win32" -L "." "D:\Freebasic\fbedit\Compilier\lib\win32\crt2.o" "D:\Freebasic\fbedit\Compilier\lib\win32\crtbegin.o" "D:\Freebasic\fbedit\Compilier\lib\win32\fbrt0.o" "test.o" "-(" -luser32 -lfb -lgcc -lmsvcrt -lkernel32 -lmingw32 -lmingwex -lmoldname -lsupc++ "-)" "D:\Freebasic\fbedit\Compilier\lib\win32\crtend.o"
 pause
 Все в нашем каталоге должны быть три файла с разным расширением:
 
 .o - объектный файл
 .asm - ASM листинг
 .exe - приложение
 
 Всего доброго!
 
 Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 |  |  |  |  | 
| 
					| Somerick | Дата: Суббота, 09.02.2019, 06:19 | Сообщение # 2 |  | Рядовой Группа: Пользователи Сообщений: 14 Статус: Offline | Подобной компиляцией в несколько вызовов утилит пользуюсь, не люблю когда в программу компилятор добавляет всякое лишнее что не нужно, без чего точно работает. В большинстве программ мне не нужны crtbegin.o crtend.o и подобные добавки, нет инициализации статических классов, вызова конструкторов, деструкторов, нет обработки исключений, критических секций и проч. хитростей. И недолюбливаю тип String, как с ним организована работа, соединение строк. И Print не нравится, когда есть эффективный форматирующий printf из C, а также самодельные есть, пишу свои типы, функции если надо. 
 Ладно, хорошо, что можно альтернативами пользоваться и скриптами можно управлять, настраивать параметры и заодно исключить кое-что. Но неужели один fbc не может.
 gcc из MinGW знаю точно, может если его попросить в командной строке, даст искомый результат, сделает минимальный ехе размером в районе единиц КБ, всё как надо - только исходный скомпилированный код и никаких добавок crt*.o итп.
 
 Батники есть, так-то с ними работает, но как иначе, есть ли новый вариант? Чтоб в одну строку, просто вызов fbc.exe и параметры.
 Известно, можно передавать параметры линкеру посредством -Wl
 Можно передавать ассемблеру через -Wa.
 Ключ -nostartfiles fbc к сожалению не принимает.
 |  |  |  |  |