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  | tar -zxvf systemc-2.3.tar.gz  | 
如果是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 >
>
>
再次make就能成功。
在此目录中生成了两个新的文件夹,include 与 lib-linux64
大功告成!
删除刚才新建的tmp文件夹,并设置环境变量:
1  | cd ..  | 
运行
运行一个systemc程序test.cpp进行测试。
1  | 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  | 
Makefile
创建文件 Makefile
1  | LIBDIR=-L/home/users/0927/systemc-2.3/lib-linux64  | 
执行命令 make 即可编译。
错误解决
报错:
1  | ./test: error while loading shared libraries: libsystemc-2.3.0.so: cannot open shared object file: No such file or directory  | 
原因是没有设置环境变量,仔细看看这一步哪里没写对(比如路径)。