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」までのパスを埋め込んでくれます。

参考サイト