TinyC(TCC) 获得 LibTcc.dll 的简单方法

lim2003 2011-01-11 12:20:23
长期从 CSDN 里 down 东西,获得支持, 可未曾为其添砖加瓦, 今天获知一个技巧性的东西,和大家共享。 ^_^

最近寻找可放在自己程序里的 C/C++ 脚本(所谓嵌入式脚本),CInt、Tcc 等等都试了个遍,最后看中这个两个。

特希望 Cint可用(虽然是日本人写的,丰田本田松下等等东东也为我们所用嘛,所以就不介意用人家的源代码啦),毕竟这东东是 C++ 的。 可不管怎么编译(MinGW中), 获得的 LibCint.dll 怎么 LoadLibrary 都是失败,官网发布的LibCint.dll也是一样的问题, 让人灰心。

退而求其次, Tcc 这么小,挺可人,说明、例子看起来使用都很简单,可惜只是 C99 的。
可找老半天,就找不到 LibTcc.dll. 只好自己编译啦。

方法一:
根据 《基于Tiny C compiler的c脚本混合编程方法》,在 MinGW 中编译获得:
gcc -O2 -shared -Wall -Wl,--export-all-symbols -mpreferred-stack-boundary=2 -march=i386 -falign-functions=0 -fno-strict-aliasing -DTCC_TARGET_PE -DLIBTCC -o libtcc.dll tcc.c

好,该Dll 用 libtcc_test.c 测试通过。

方法二——本帖要说的简单方法:
灵机一动, TCC 号称最小编译器,但也是编译器嘛,所以直接用 TCC来编译自己获得:
tcc -shared -rdynamic -o libtcc.dll tcc.c

注意参数, 参数的说明,可参见 tcc.c 源程序本身。
哈哈,用 libtcc_test.c 测试,一样OK。
此法真是简单方便呀, 特别是对类似我这种长期在Win下编程的人。。。 说不定还能玩出其他花样。。。

据说今天也是光棍节,祝大家节日快乐!
20110111
...全文
884 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
jxxy 2011-01-18
  • 打赏
  • 举报
回复
Hi Lim2003,请忽略上面的问题,上面仅仅是告警,DLL还是生成了,现在担心这个生成的DLL是否有问题,有待验证。谢谢!
jxxy 2011-01-18
  • 打赏
  • 举报
回复
Hi Lim2003, 谢谢你的分享。我在编译libtcc.dll的时候出现了错误,不知道为什么,可能是我的Mingw的安装或者配置有问题,问题如下:

D:\tcc-0.9.25>gcc -O2 -shared -Wall -Wl,--export-all-symbols -mpreferred-stack-b
oundary=2 -march=i386 -falign-functions=0 -fno-strict-aliasing -DTCC_TARGET_PE -
DLIBTCC -o libtcc.dll tcc.c
In file included from libtcc.c:1130:0,
from tcc.c:21:
tccpp.c: In function 'get_tok_str':
tccpp.c:181:15: warning: pointer targets in assignment differ in signedness
tccpp.c: In function 'hash_cached_include':
tccpp.c:1090:7: warning: pointer targets in assignment differ in signedness
tccpp.c: In function 'next_nomacro1':
tccpp.c:2049:13: warning: pointer targets in passing argument 2 of 'tok_alloc_ne
w' differ in signedness
tccpp.c:47:18: note: expected 'const char *' but argument is of type 'uint8_t *'

tccpp.c: In function 'macro_twosharps':
tccpp.c:2686:27: warning: pointer targets in assignment differ in signedness
In file included from tcc.c:21:0:
libtcc.c: In function 'tcc_compile_string':
libtcc.c:1255:17: warning: pointer targets in assignment differ in signedness
libtcc.c:1256:17: warning: pointer targets in assignment differ in signedness
libtcc.c: In function 'tcc_define_symbol':
libtcc.c:1273:5: warning: pointer targets in passing argument 1 of 'pstrcpy' dif
fer in signedness
libtcc.c:329:7: note: expected 'char *' but argument is of type 'unsigned char *
'
libtcc.c:1274:5: warning: pointer targets in passing argument 1 of 'pstrcat' dif
fer in signedness
libtcc.c:349:7: note: expected 'char *' but argument is of type 'unsigned char *
'
libtcc.c:1278:5: warning: pointer targets in passing argument 1 of 'pstrcat' dif
fer in signedness
libtcc.c:349:7: note: expected 'char *' but argument is of type 'unsigned char *
'
libtcc.c:1283:5: warning: pointer targets in passing argument 1 of 'strlen' diff
er in signedness
c:\mingw\bin\../lib/gcc/mingw32/4.5.0/../../../../include/string.h:65:8: note: e
xpected 'const char *' but argument is of type 'unsigned char *'
In file included from libtcc.c:1315:0,
from tcc.c:21:
tccasm.c: In function 'tcc_assemble_inline':
tccasm.c:718:17: warning: pointer targets in assignment differ in signedness
tccasm.c:719:17: warning: pointer targets in assignment differ in signedness
In file included from libtcc.c:1328:0,
from tcc.c:21:
tccelf.c: In function 'rebuild_hash':
tccelf.c:71:12: warning: pointer targets in assignment differ in signedness
tccelf.c:86:13: warning: pointer targets in passing argument 1 of 'elf_hash' dif
fer in signedness
tccelf.c:49:22: note: expected 'const unsigned char *' but argument is of type '
char *'
tccelf.c: In function 'put_elf_sym':
tccelf.c:129:13: warning: pointer targets in passing argument 1 of 'elf_hash' di
ffer in signedness
tccelf.c:49:22: note: expected 'const unsigned char *' but argument is of type '
const char *'
tccelf.c: In function 'find_elf_sym':
tccelf.c:159:5: warning: pointer targets in passing argument 1 of 'elf_hash' dif
fer in signedness
tccelf.c:49:22: note: expected 'const unsigned char *' but argument is of type '
const char *'
tccelf.c:163:15: warning: pointer targets in assignment differ in signedness
tccelf.c: In function 'relocate_syms':
tccelf.c:442:18: warning: pointer targets in assignment differ in signedness
tccelf.c:444:22: warning: pointer targets in assignment differ in signedness
tccelf.c: In function 'put_got_entry':
tccelf.c:885:14: warning: pointer targets in assignment differ in signedness
tccelf.c: In function 'elf_output_file':
tccelf.c:1391:30: warning: pointer targets in assignment differ in signedness
tccelf.c:1427:30: warning: pointer targets in assignment differ in signedness
tccelf.c:1445:30: warning: pointer targets in assignment differ in signedness
tccelf.c:1487:34: warning: pointer targets in assignment differ in signedness
tccelf.c: In function 'tcc_load_object_file':
tccelf.c:2111:17: warning: pointer targets in assignment differ in signedness
tccelf.c:2229:26: warning: pointer targets in assignment differ in signedness
tccelf.c:2245:14: warning: pointer targets in assignment differ in signedness
tccelf.c: In function 'tcc_load_alacarte':
tccelf.c:2335:14: warning: pointer targets in assignment differ in signedness
tccelf.c: In function 'tcc_load_dll':
tccelf.c:2471:20: warning: pointer targets in assignment differ in signedness
tccelf.c:2500:14: warning: pointer targets in assignment differ in signedness
tccelf.c:2509:18: warning: pointer targets in assignment differ in signedness
In file included from libtcc.c:1335:0,
from tcc.c:21:
tccpe.c: In function 'pe_build_imports':
tccpe.c:750:36: warning: pointer targets in initialization differ in signedness
tccpe.c: In function 'pe_build_exports':
tccpe.c:812:14: warning: pointer targets in assignment differ in signedness
tccpe.c: In function 'pe_check_symbols':
tccpe.c:1108:32: warning: pointer targets in initialization differ in signedness

tccpe.c: In function 'pe_test_res_file':
tccpe.c:1322:9: warning: pointer targets in passing argument 1 of 'strcmp' diffe
r in signedness
c:\mingw\bin\../lib/gcc/mingw32/4.5.0/../../../../include/string.h:59:5: note: e
xpected 'const char *' but argument is of type 'BYTE *'

请帮我看看什么地方出了问题,谢谢!
lim2003 2011-01-12
  • 打赏
  • 举报
回复
CINT总是嵌入调用不成功,老有R6034之类的运行时库错误。。。

毕竟用C来表达东西也比用 lua 等熟些, 所以

最后还是用 TCC,简单方便些。

谢谢各位!
mnbqwe1 2011-01-12
  • 打赏
  • 举报
回复
dll2lib 可以转
lim2003 2011-01-11
  • 打赏
  • 举报
回复
源代码直接放进工程,也挺好的。 ^_^
等会直接加把 CINT 的源代码加进工程试试。

用CINT 时,发布的文件量多不多?
gamemagic 2011-01-11
  • 打赏
  • 举报
回复
我是游戏开发的,所以可能不希望带有太多dll ^_^
lim2003 2011-01-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 gamemagic 的回复:]

其实cint也没有问题啊,为什么一定要做成dll呢?我很不喜欢dll这个东西。

你可以编译成.lib静态库,给你的程序使用啊
[/Quote]

和工程有关,所以习惯用dll。 ^_^
gamemagic 2011-01-11
  • 打赏
  • 举报
回复
其实cint也没有问题啊,为什么一定要做成dll呢?我很不喜欢dll这个东西。

你可以编译成.lib静态库,给你的程序使用啊
gamemagic 2011-01-11
  • 打赏
  • 举报
回复
很久前就关注过tcc

既然是编译器,肯定可以自编译了。

我不采用dll的方式,而是直接把源代码放进自己的工程里,随工程编译成exe
ayw215 2011-01-11
  • 打赏
  • 举报
回复
用lua吧~~
redleaves 2011-01-11
  • 打赏
  • 举报
回复
cint性能比php还差很多....
tcc要好很多.但有很多BUG
其实C/C++的设计并不太适合用做脚本.选它们做脚本还不如用专门的脚本语言.像lua/javascript这些..
另外,如果真要用C/C++脚本.建议用ch.这玩意是商业软件.质量比较好.而且有免费版可以用.

64,639

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧