SCV使用時の役立つ?gccオプション
SCVをコンパイルする際の Makefileはこんな感じです。
※使用する際にはインストールパスを自分のに置き換えてください。
SYSTEMC_HOME = /usr/local/lib/systemc-2.2.0 SCV_HOME = /usr/local/lib/scv-1.0p2-sysc2.2 TARGET_ARCH = linux SYSTEMC_INC_DIR = $(SYSTEMC_HOME)/include SYSTEMC_LIB_DIR = $(SYSTEMC_HOME)/lib-$(TARGET_ARCH) SCV_INC_DIR = $(SCV_HOME)/include SCV_LIB_DIR = $(SCV_HOME)/lib-$(TARGET_ARCH) FLAGS = -g -Wall -pedantic -Wno-long-long \ -DSC_INCLUDE_DYNAMIC_PROCESSES -fpermissive \ -I$(SYSTEMC_INC_DIR) -I$(SCV_INC_DIR) LDFLAGS = -L$(SCV_LIB_DIR) -lscv -L$(SYSTEMC_LIB_DIR) -lsystemc -lm SRCS = sc_main.cpp OBJS=$(SRCS:.cpp=.o) main: $(OBJS) g++ -o $@ $(OBJS) $(LDFLAGS) .cpp.o: g++ -c $(FLAGS) $< %.o: %.c gcc -Wall -c $< clean: rm -f main *.o *.lo
しかし、「libscv.so」に対して以下の Errorが発生します。
$> ./main
./main: error while loading shared libraries: libscv.so: cannot open shared object file: No such file or directory
原因はこちらのように、libscv.soへのパスが見えていないからになります。
$> ldd main
linux-gate.so.1 => (0x00bd3000)
libscv.so => not found
:
この解決方法として、SCVの Exampleでは、「LD_LIBRARY_PATH」に対して
追加することで解決しています。
LD_LIBRARY_PATH=$SCV_HOME/lib-$SYSTEMC_ARCH export LD_LIBRARY_PATH
別の手段:リンカ時に指定する
ローカルな環境であれば、リンカ時に設定することが可能です。
(LD_LIBRARY_PATH使うのダメみたいなこともあるみたい)
「-Xlinker -rpath パス」
を追加します。
LDFLAGS = -Xlinker -rpath $(SCV_LIB_DIR) -L$(SCV_LIB_DIR) -lscv -L$(SYSTEMC_LIB_DIR) -lsystemc -lm
これで、コンパイル&リンカすると、
$> ldd main
linux-gate.so.1 => (0x00a73000)
libscv.so => /usr/local/lib/scv-1.0p2-sysc2.2/lib-linux/libscv.so (0x003fb000)
:
というような感じで、「libscv.so」までのパスを埋め込んでくれます。