こんばんは@pasonatsutanです。参加者の皆様がHDLバリバリなので、gkbrですが、ぼくは、HDLのことはほとんど知らないので、臆せずにsystemc寄りの記事を書いていきたいと思います。
SystemCを自分用にコンパイルする
SystemCを使っていると、自分用にシミュレータに手を入れたくなりますよね。その時、元のSystemCの環境と手を入れたSystemCの環境を間違えてリンクしてしまうかもしれません。そんなときは、systemc-2.3.0/src/sysc/kernel/sc_ver.h の文字列を書き換えてSystemCをコンパイルしましょう。
systemc-2.3.0/src/sysc/kernel/sc_ver.h
#define SYSTEMC_2_3_0
#define SC_API_VERSION_STRING sc_api_version_2_3_0_custom //ここを好きな文字列に
#間違えてinclude、もしくは linkすると
include しているヘッダーファイルと、リンクしようとしているライブラリのバージョンが違うときはこのようなエラーがでます。
g++ -o test.exe -L. -L../lib-cygwin -lsystemc -lm test.o /lib/libtcl.a
test.o:test.cpp:(.text+0x34): `sc_core::sc_api_version_2_3_0_custom::sc_api_version_2_3_0_custom()' に対する定義されていない参照です
collect2: ld はステータス 1 で終了しました
Makefile:15: recipe for target `test.exe' failed
make: *** [test.exe] Error 1
逆にいうと、普通にSystemCを使っていてこのようなエラーが出たときは、インクルードしているバージョンと、リンクしているバージョンが違います。