易语言吧 关注:266,251贴子:1,662,938

【软件生成器】教你如何调用编译器来制作软件(免字节集替换)

只看楼主收藏回复

最近发现了一款有用的软件e4a(可以制作安卓程序),生成的原理是调用了编译器。很多人都觉得想做软件生成器就一定要制作编译器,其实恰恰相反,编译器太难制作了,连易语言都是调用了c语言(准确说是vc的编译器)来生成可执行程序。所以今天,就来跟大家科普一下如何调用编译器的知识(现在大部分用易语言做的语言都是采用调用编译器的方法)。
扯到这里,就不得不介绍一下GCC这个编译器了。
GNU编译器套件(GNU Compiler Collection)包括C、C++、Objective-C、Fortran、Java、Ada和Go语言的前端,也包括了这些语言的库(如libstdc++、libgcj等等)。GCC的初衷是为GNU操作系统专门编写的一款编译器。GNU系统是彻底的自由软件。此处,“自由”的含义是它尊重用户的自由。

所以,理论上调用gcc编译器采用c到自制语法到编译器的步骤就可以制作自己的编程语言(其实也不完全可以说是语言),原理其实是跟易语言相同的。
所以不得不说到c语言了。下面是一段c语言代码,大家来感受一下。
#include <stdio.h>
int main()
{
printf("新年快乐!by:三国杀左慈0\n");
getch();
return 0;
}
编译效果是这样的。
那么我们怎么把这串代码用易语言来编译出来呢?
首先得设置一个环境变量。(这样才能调用gcc,当然,输入绝对地址也可以)
我的电脑-属性-高级-环境变量

按照以下顺序来设置系统变量。
path
路径;记住要加分号
新建系统变量
include
路径
lib
路径

#include <stdio.h>
int main()
{
printf("新年快乐!by:三国杀左慈0\n");
getch();
return 0;
}
保存为txt文本再把后缀改为c-注意是小c不是C(名字改为c ,最后的文件名为c.c),然后存入D盘(一定要最开始的D盘里面(别的盘也可以,但一定要最开始),不然没用,具体自己熟悉cmd命令)
点击开始,运行,输入cmd,输入d:按回车,再输入gcc c.c再回车,就生成了一个可执行程序。


那个人c的图标不用管。最终生成的文件默认为a。
那么我们是否可以用易语言代替这个动作呢?当然。具体情况看以下图片。

注意,cmd的两个命令之间需要用&来连接。
尝试以下,是不是也生成了exe文件?那么下次,只要自己把c的代码转换成自己的编程语言就可以了,是不是很神奇?
表示楼主这么辛苦可不可以申精


IP属地:泰国1楼2016-02-13 16:45回复
    似乎看明白点了...先回复支持一下吧


    2楼2016-02-13 17:00
    收起回复
      楼上正解。


      IP属地:广东来自iPhone客户端7楼2016-02-13 17:46
      收起回复
        相当于写了个IDE⋯⋯


        IP属地:浙江来自iPhone客户端8楼2016-02-13 18:16
        收起回复
          请问什么都不懂的可以加吗,我不会干扰大家的


          IP属地:北京来自Android客户端9楼2016-02-13 18:50
          收起回复
            前排 万一火了呢


            IP属地:广东来自Android客户端10楼2016-02-13 20:09
            回复
              能减少误报吗


              IP属地:江西来自iPhone客户端13楼2016-02-14 09:34
              收起回复
                再补一点,最好用代码编辑框,因为有些编码会导致c语言无法识别中文,代码编辑框可以调整编码有兴趣的人可以试试看,做好了记得给lz看看哈~


                IP属地:泰国来自Android客户端14楼2016-02-14 09:58
                回复
                  留名


                  IP属地:云南来自Android客户端16楼2016-02-14 10:28
                  回复
                    就没有银来回复咩


                    IP属地:泰国来自Android客户端18楼2016-02-14 13:55
                    回复
                      易语言不是有编译器吗→_→


                      IP属地:广东来自Android客户端19楼2016-02-14 14:06
                      回复
                        编辑框里谢写返回(),然后子文本替换()一下,变成了return();难道易语言不是这样的?


                        IP属地:浙江来自Android客户端20楼2016-02-14 14:26
                        收起回复