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 |
原因是没有设置环境变量,仔细看看这一步哪里没写对(比如路径)。