haav | Дата: Понедельник, 17.09.2012, 09:28 | Сообщение # 1 |
Генералиссимус
Группа: Администраторы
Сообщений: 1363
Статус: 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 к сожалению не принимает.
|
|
| |