Windows上のUbuntuでSystemC環境を整える
Windows上でSystemC環境を整えたくてWindows Subsystem for Linuxの環境でSystemCを試してみた。
Ubuntuのインストールはここでは省略。
準備
Ubuntuを入れた初期状態ではgcc等の開発環境すら入っていないので必要なものをapt-getしてくる
% sudo apt-get update % sudo apt-get install gcc g++ make
SystemCのソースコードを入手してインストールする
% cd systemc-2.3.1 % mkdir build % cd build % sudo mkdir -p /opt/systemc/2.3.1 % ../configure --prefix=/opt/systemc/2.3.1 % make % sudo make install
ここまでは問題なくできた。
サンプルコードをコンパイルしてみる
hello.cpp
#include <systemc.h> int sc_main(int argc, char* argv[]) { printf("Hello SystemC!!!\n"); return 0; }
コンパイルは次の通り。
% g++ -c -I/opt/systemc/2.3.1/include hello.cpp % g++ -o sim.x -L/opt/systemc/2.3.1/lib-linux64 -Wl,-R/opt/systemc/2.3.1/lib-linux64 -Wl,-Bstatic -lsystemc -Wl,-Bdynamic -lm -pthread hello.o % ./sim.x SystemC 2.3.1-Accellera --- Aug 10 2017 20:24:07 Copyright (c) 1996-2014 by all Contributors, ALL RIGHTS RESERVED Hello SytemC!!!
コンパイルで少しはまりました。
./sim.x: error while loading shared libraries: libsystemc-2.3.1.so: cannot enable executable stack as shared object requires: Invalid argument
このメッセージの対策として
-Wl,-Bstatic -lsystemc -Wl,-Bdynamic
"-Bstatic"と"-Bdynamic"とでsystemcライブラリを挟むと挟まれたライブラリについてスタティックリンクを有効にするという意味になるようだ。
なぜスタティックリンクを有効にしなければならないのかはよくわからない。
ちなみに"-Wl,R"は動的ライブラリパスを教えてあげている。"-WL,rpath"でもよいらしい。
LD_LIBRARY_PATHを指定していれば付ける必要はない。