« gccで調べ物 | Main | SysytemCの最初の一歩 »

2006.02.04

デマングル(demangle)

ようやく、SysytemCが再開。

最初のエラーがこれなので、
arith01.o(.text+0x1cc): In function `sc_main':
: undefined reference to `sc_dt::sc_signed::sc_signed(int)'

要するに、sc_mainから呼んでいる、sc_signedが見つかりませんと言われている。
nmコマンドで、エントリを見てもそれっぽいのあるんだけど、変な文字列で
よくわからない。

いやなブログで目的の解答を発見。感謝。
c++filtコマンドを使うと、人間が分かる形にしてくれる。

こんな感じで、grepかけてみる。
> nm libsystemc.a | c++filt | grep sc_dt::sc_signed::sc_signed

U sc_dt::sc_signed::sc_signed(int)
U sc_dt::sc_signed::sc_signed(int)
000158c8 T sc_dt::sc_signed::sc_signed(sc_dt::sc_unsigned const*, int, int)
0001519c T sc_dt::sc_signed::sc_signed(sc_dt::sc_signed const*, int, int)
(省略)
0000a02c T sc_dt::sc_signed::sc_signed(sc_dt::sc_signed_subref_r const&)
0000a60c T sc_dt::sc_signed::sc_signed(sc_dt::sc_unsigned_subref_r const&)
000095e0 T sc_dt::sc_signed::sc_signed(sc_dt::sc_signed const&)
00014b74 T sc_dt::sc_signed::sc_signed(sc_dt::sc_signed const&, int)
0000953c T sc_dt::sc_signed::sc_signed(int)
00014d58 T sc_dt::sc_signed::sc_signed(int, int, int, unsigned long*, bool)
U sc_dt::sc_signed::sc_signed(sc_dt::sc_signed_subref_r const&)

えー、下から3つめにちゃんとエントリーあるじゃん。

ついでだけど、C++の名前空間と、関数のオーバーロードの仕組みも理解。
名前空間て、C言語でいう所のstaticと同じ事やっているのか。
同じくオーバーロードも結局引数のバリエーションだけ、関数作ってるんだな。

なんとなくそうかなとは思っていたけど、これで一つ自信がついた。

|

« gccで調べ物 | Main | SysytemCの最初の一歩 »

Comments

Post a comment



(Not displayed with comment.)




TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/18154/8497423

Listed below are links to weblogs that reference デマングル(demangle):

« gccで調べ物 | Main | SysytemCの最初の一歩 »