TinyC的VC++版
来源:互联网 发布:偶像大师 知乎 编辑:程序博客网 时间:2024/06/05 10:58
TinyC的VC++版
考虑换成新的脚本,还好还没开始写,感谢:http://hi.baidu.com/seagatecm/blog/item/9e3425cb8378ef16bf09e622.html 转帖啊,又是一年了,一年更新一次。
最近在网上看到有文章介绍Tiny C compiler。感觉这个用来做游戏脚本应该不错,运行时编译出来的是机器码,应该比lua什么的更一些快吧。
从官网上下载了代码,打开一看,没有visual studio的项目文件,只有mingw的。想想又要diy,比较伤脑筋,在google上找找,过了半个小时什么都没找到。
只好看看包里面的代码,其中一个文件libtcc_test.c演示了将tinyc做为脚本的调用方式,宿主程序能通过函数tcc_get_symbol直接获得脚本中定义的c函数,相当的方便。对比一下lua和luaplus那种无语的调用和封装,我都开始考虑要不要将工作中使用到的lua部分全换成tinyc了。
建了一个vs项目开始编译tinyc,在win32这个文件中有一个build-tcc.bat,运行一下生成一个config.h文件。把这个文件加入到代码中,很顺利的就编译通过了。我采用了lib+exe的方式生成了编译程序和库文件,试着编译了一下例子代码,完全正确。
可是实验libtcc_test.c的时候,出问题了,编译出来的程序运行时报:undefined symbol 'printf'。看来是内嵌在里面的c程序找不到链接库,可是为啥Tinyc编译出来的程序能正常运行呢。想不通为什么,继续去google一把,半个小时后啥结论也没找到,看来我总是遇到一些全球罕见的程序问题啊。
只能自己来调试一下了,看了在tcc_relocate函数中出的错。printf链接的符号文件被放在msvcrt.def文件里面了,跟踪到读取def的函数pe_load_def_file中,看到文件正确读取了,printf函数也被加入到表中了。最后发现问题在resolve_sym函数的LoadLibrary这里了,他没有能读取msvcrt.def中定义的msvcrt.dll,报错说模块没找到。太奇怪了,这文件不是好好的呆在system32下面吗。
新建了一个项目专门测试了LoadLibrary,无法读取这个dll,改用Multi-Byte编码方式才能读取。原来2005默认的项目文件是unicode的,导致tinyc中加载dll无法成功。最后的结论是:看来求google不如求己啊。
最近在网上看到有文章介绍Tiny C compiler。感觉这个用来做游戏脚本应该不错,运行时编译出来的是机器码,应该比lua什么的更一些快吧。
从官网上下载了代码,打开一看,没有visual studio的项目文件,只有mingw的。想想又要diy,比较伤脑筋,在google上找找,过了半个小时什么都没找到。
只好看看包里面的代码,其中一个文件libtcc_test.c演示了将tinyc做为脚本的调用方式,宿主程序能通过函数tcc_get_symbol直接获得脚本中定义的c函数,相当的方便。对比一下lua和luaplus那种无语的调用和封装,我都开始考虑要不要将工作中使用到的lua部分全换成tinyc了。
建了一个vs项目开始编译tinyc,在win32这个文件中有一个build-tcc.bat,运行一下生成一个config.h文件。把这个文件加入到代码中,很顺利的就编译通过了。我采用了lib+exe的方式生成了编译程序和库文件,试着编译了一下例子代码,完全正确。
可是实验libtcc_test.c的时候,出问题了,编译出来的程序运行时报:undefined symbol 'printf'。看来是内嵌在里面的c程序找不到链接库,可是为啥Tinyc编译出来的程序能正常运行呢。想不通为什么,继续去google一把,半个小时后啥结论也没找到,看来我总是遇到一些全球罕见的程序问题啊。
只能自己来调试一下了,看了在tcc_relocate函数中出的错。printf链接的符号文件被放在msvcrt.def文件里面了,跟踪到读取def的函数pe_load_def_file中,看到文件正确读取了,printf函数也被加入到表中了。最后发现问题在resolve_sym函数的LoadLibrary这里了,他没有能读取msvcrt.def中定义的msvcrt.dll,报错说模块没找到。太奇怪了,这文件不是好好的呆在system32下面吗。
新建了一个项目专门测试了LoadLibrary,无法读取这个dll,改用Multi-Byte编码方式才能读取。原来2005默认的项目文件是unicode的,导致tinyc中加载dll无法成功。最后的结论是:看来求google不如求己啊。
- TinyC的VC++版
- TinyC(TCC) 获得 LibTcc.dll 的简单方法
- VC版的SysErrorMessage
- TINYC写个8052虚拟机(4) 宏定义。 .
- 钩子程序的VC++版
- VC剪切版的复制
- TINYC写个8052虚拟机(1) Intel HEX文件格式转换为BIN。
- TINYC写个8052虚拟机(2) Intel MCS-805x指令表.
- TINYC写个8052虚拟机(3) Intel MCS-805x寄存器定义
- [转]vc++ release 版的生成
- 改进版的《黑客字典》VC++源码
- vc版的风机模拟代码,备忘
- VC写的双人版俄罗斯方块
- VC版的贪吃蛇游戏
- [VC++] 一些学习VC++的网站
- 如何学习vc++(vc的用处)
- 3.如何学习vc++(vc的用处)
- 如何学习vc++(vc的用处)
- activiti KickStart
- 内部类容易迷惑的地方
- 逃出你的肖申克 (一):一定要亲身经历了之后才能明白?
- 伤感QQ日志:全世界 我只想安静爱你
- 19.5. xml.etree.ElementTree — The ElementTree XML API
- TinyC的VC++版
- 全排列库函数
- 为什么你应该(从现在开始就)写博客
- Java算法学习(栈操作实例)
- Linux下automake软件编译与发布之多级目录结构的处理
- TinyC(TCC) 获得 LibTcc.dll 的简单方法
- 当我给了你体谅也给了自己远方:伤感日志
- 欧拉函数学习小结 #nobody
- Install Homebrew