Windows

安装 SystemC

下载并解压源文件,这里使用的是 2.3 版本。

使用 Visual Studio 2017 打开 systemc-2.3\msvc71\SystemC\SystemC.sln 文件,并编译。

常见的调整,如 项目属性->常规->Windows SDK 设置为 10.x

错误解决

实测在 Visual Studio 2019 中并没有以下错误

报错

1
The C++ Standard Library forbids macroizing keywords. Enable warning C4005 to find the forbidden macro.

解决方案

在“项目->属性->配置属性->C/C++->预处理器->预处理器定义”中加入 _XKEYCHECK_H

报错

1
C3688	文本后缀“PRIu64”无效;未找到文文本运算符或文本运算符模板“operator """"PRIu64”

看了一下,是 std::sprintf( buf, "%"PRIu64, val );,没见过的语法。

解决方案

将这行注释掉即可。

链接 SystemC

项目属性中做如下设置(假设 SystemC 路径:C:\systemc-2.3.3):

C/C++:

  • 常规->附加包含目录:添加 C:\systemc-2.3.3\src
  • 语言->启用运行时类型信息:选择 是(/GR)
  • 命令行->添加 /vmg /D_CRT_SECURE_NO_DEPRECATE

链接器:

  • 常规->附加库目录:添加 C:\systemc-2.3.3\msvc71\SystemC\Debug
  • 输入->附加依赖项:添加 SystemC.lib

错误解决

报错

1
E0135	namespace "std" 没有成员 "gets"	Test	c:\systemc-2.3\src\systemc.h	134

解决方案

尚未找到正常解决方法,只能注释掉 using std::gets;

报错

一大堆的链接错误,形如:

1
LNK2005	"private: static class std::xxxxx 已经在 msvcprtd.lib(MSVCP140D.dll) 中定义
1
LNK2038	检测到“RuntimeLibrary”的不匹配项: 值“MTd_StaticDebug”不匹配值“MDd_DynamicDebug”(main.obj 中)

解决方案

项目属性->配置属性->C/C++->代码生成->运行库,改成 多线程调试(/Mtd)(Release改成 /Mt,默认是 多线程调试DLL(/MDd)

Linux

安装

下载systemc源码包,解压缩。

进入systemc-2.3文件夹,新建一临时文件夹tmp,并进入其中,执行make。

1
2
3
4
5
6
7
8
9
10
tar -zxvf systemc-2.3.tar.gz

cd systemc-2.3
mkdir tmp
cd tmp

../configure

make
make install

如果是systemc2.3.1,make时可能会出现一些错误(2.3.3没有):

错误指示文件 ../src/sysc/datatypes/bit/sc_bit_proxies.h 文件中的 mutable 是多余的,需要删除!

还有一处错误,在文件 ../src/sysc/utils/sc_utils_ids.cpp 文件中加入如下头文件:

1
2
3
> #include <cstring>
> #include <cstdlib>
>

再次make就能成功。

在此目录中生成了两个新的文件夹,includelib-linux64
大功告成!

删除刚才新建的tmp文件夹,并设置环境变量

1
2
3
cd ..
rm -rf tmp
export LD_LIBRARY_PATH=/home/users/0927/systemc-2.3/lib-linux64

运行

运行一个systemc程序test.cpp进行测试。

1
2
g++ -Wall -std=c++11 main.cpp -I/home/users/0927/systemc-2.3/include -L/home/users/0927/systemc-2.3/lib-linux64 -o test -lsystemc
./test

Makefile

创建文件 Makefile

1
2
3
4
5
6
7
LIBDIR=-L/home/users/0927/systemc-2.3/lib-linux64
INCDIR=-I/home/users/0927/systemc-2.3/include
LIB=-lsystemc
all:
g++ -Wall -std=c++11 -o test test.cpp $(LIBDIR) $(INCDIR) $(LIB)
clean:
rm -rf *.o

执行命令 make 即可编译。

错误解决

报错:

1
./test: error while loading shared libraries: libsystemc-2.3.0.so: cannot open shared object file: No such file or directory

原因是没有设置环境变量,仔细看看这一步哪里没写对(比如路径)。

参考:https://www.cnblogs.com/cpsmile/p/8044614.html