tcc 学習:libtcc 直接使用

2017-05-17 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
先日(2017-05-12)の記事:
luajit-tcc:Tiny C Compiler 0.9.26 binding for LuaJIT」では、

  ・・・・・
  ・・・・・
  これって、
  以前(2017-05-03)の記事「tcc - Tiny C Compiler」で書いた、
  “libtcc”を使ったもの?
  ・・・・・
  ・・・・・
  案の定「tcc.lua」1つあれば使える。
  ・・・・・
  ・・・・・

と云うことで、
libtcc”はイラナイのだが、・・・・・

tcc.luaモジュールを学習して、
libtccを直接使ってみることに挑戦。


tcc.luaモジュールの他に、
・ ~/tcc/libtcc/  にある、libtcc.h
と、
・ ~/tcc/examples/ にある、libtcc_test.c
も参照した。


それで、
以前(2017-05-13)の記事「LuaJIT-tcc:例題から学習」で書いた、
“use_inline_C.gsl”を書き直した:
----- use_libtcc_inline_C.gsl -----
-------- void* は、正確には TCCState*
ffi.cdef[[
void* tcc_new( void );
int tcc_set_output_type( void* s, int output_type );
// #define TCC_OUTPUT_MEMORY 0 /* run in memory (default)
// #define TCC_OUTPUT_EXE 1 /* executable file
// #define TCC_OUTPUT_DLL 2 /* dynamic library
// ・・・・・・・・・・・・

int tcc_compile_string( void* s, const char* buf );
int tcc_relocate( void* s1, void* ptr );
// #define TCC_RELOCATE_AUTO (void*)1

void* tcc_get_symbol( void* s, const char* name );
void tcc_delete( void* s );
int tcc_add_library_path( void* s, const char* pathname );
]]

-- =========================
tcc = ffi.load( 'libtcc' ) -- カレントに libtcc.dll を配置
relocate_auto = ffi.cast( 'void*', 1 )

charA = |s| ffi.cast( 'char*', s )
-- =========================

TCL = tcc.tcc_new()
z = tcc.tcc_set_output_type( TCL, 0 )

-- ===== Cコード =====
sss = [[ int Add( int x, int y ){
return x + y;
}
]]
z = tcc.tcc_compile_string( TCL, charA(sss) )

-- この行が無いと、libtcc1.a が見つから無いエラー???
z = tcc.tcc_add_library_path( TCL, '.' ) -- カレントに libtcc1.a も配置

tcc.tcc_relocate( TCL, relocate_auto )

sym = tcc.tcc_get_symbol( TCL, charA('Add') )
Add = ffi.cast( 'int(*)( int, int )', sym )

-- ===== GSL Shell コード =====

z = Add( 2, 5 ); print( z )
print( Add( 10, 5 ) )

-- ===== 後処理 ============
tcc.tcc_delete(TCL)
_=io.read(1)
こんな感じかな。


libtcc1.a に関するエラー原因不明。


本日はここまで。


luajit-tcc 学習は続く。


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


170405
関連記事
スポンサーサイト

コメントの投稿

管理者にだけ表示を許可する

おきてがみ/blogram
blogram投票ボタン



おきてがみ

最新記事
カレンダー
05 | 2017/06 | 07
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

カウンター(fc2、i2i) /Google Analytics


i2i(from 2010-08-24)
Total =
Today  =  
Yesterday=
アンチエイジング

Google Analytics
ブックマーク