SystemC文件:systemc-2.2.0.tgz 我下了几个版本都保存在百度云 下载地址:http://pan.baidu.com/s/1sl0ldVJ
1.配置SystemC开发环境
目前SystemC的开发工具有很多,但是实质上SystemC只是C++增加的一个类库,因此任何一个符合ANSI标准的C++ 编译工具都可以对SystemC程序进行编译链接从而生成可执行文件,而我们要做的则是如何把SystemC的头文件和库文件整合到你的C++开发环境中去。
很多书籍和文章中都介绍了在Windows+Visual C++环境下配置SystemC。考虑到我对VC一窍不通,而且已经在虚拟机上配置好了Linux和gcc的开发环境,因此我选择在Linux下配置SystemC的开发环境。
SystemC需要C++编译工具的支持,因此首先要在Linux环境中安装g++环境。使用“su”命令切换为root用户,然后使用“apt-get intall g++”就可以安装g++的最新版本到系统中来。
从OSCI网站上下载最新版本的SystemC源程序压缩包,现在的最新版本是2.2.0,也有以前旧版本的下载。看到网上有的文章说SystemC的较新版本与有些Linux系统不兼容的问题,个人感觉应该不是SystemC的问题,而是配置方面的问题(不过没有做过实验啊,属于个人主观臆断,自己先汗一个……)。下载之前可能OSCI网站要求先注册一个用户,需要邮箱激活一下,不过过程还是很简单的,就不多解释了。
把下载下来的SystemC源程序压缩包在用户主目录里使用tar命令解压缩:
tar xvf systemc-2.2.0.tgz
然后进入解压缩后生成的systemc-2.2.0文件夹,建立一个临时文件夹objdir(名字可以随便起,如tmp什么的也可以):
cd systemc-2.2.0
mkdir objdir
然后进入这个临时文件夹,运行SystemC的配置程序来生成安装文件:
cd objdir
../configure -prefix=/home/user/systemc
prefix参数后面这个路径是你希望安装SystemC的目标路径,你也可以改为其他路径的。但是注意不要使用VMware和Windows共享的虚拟分区,我一开始就是安装在虚拟分区里面了,结果总是报错,说属性错误。
等安装文件生成完毕后,回到上层目录,运行make程序就行安装就可以了:
cd ..
make
make install
如果一切顺利,在/home/user/systemc下,SystemC的一切文件就都安装好了。从理论上说,你编译链接SystemC源程序的环境已然就绪了。
2.运行第一个SystemC程序
我们的第一个SystemC程序来个最简单的Hello程序吧,源代码如下:
//hello.h #ifndef _HELLO_H #define _HELLO_H #include "systemc.h" SC_MODULE(hello){ SC_CTOR(hello){ cout<<"Hello, SystemC!"<<endl; } }; #endif
//main.cpp #include "hello.h" int sc_main(int i, char* a[]){ hello h("hello"); return 0; } 上面这段代码分别保存为hello.h和main.cpp。
使用如下g++命令进行编译链接以生成可执行文件:
g++ main.cpp -I/home/user/systemc/include -L/home/user/systemc/lib-linux -o hello -lsystemc
这个命令参数比较多,说明如下:
-I/home/user/systemc/include 告诉g++编译器去/home/user/systemc/include下去寻找所需的头文件即systemc.h
-L/home/user/systemc/lib-linux 告诉ld连接器去/home/user/systemc/lib-linux下去寻找所需的库文件声明
-o hello 标准的输出参数,生成的可执行文件名为hello
-lsystemc 告诉ld连接器最终的库文件是libsystemc.a
注意参数的顺序,貌似还不能搞错了,否则会报错的。
如果g++命令执行ok,没报任何错误,就可以看到有个hello的可执行文件被生成了。输入“./hello”应该可以看到“Hellov,SystemC!”的输出信息。那么恭喜你,可以开始SystemC的探索之旅了!
============================================================================= 以下部分是博主亲身经历的问题: 共享库无法加载,所以去查看了g++关于库的内容, 最后发现是环境变量的问题!!! This is a environment setting issue for dynamic linking, because the shared library is installed outside of the system default library directories. When you execute the binary, the loader failed to find libsystemc-2.3.0.so.
Two solutions.
setting your LD_LIBRARY_PATH.
export LD_LIBRARY_PATH=/usr/local/systemc-2.3.0/lib-linux64:$LD_LIBRARY_PATH
or, if your default LD_LIBRARY_PATH is empty
export LD_LIBRARY_PATH=/usr/local/systemc-2.3.0/lib-linux64 adding rpath to the executable when linking the binary. It adds an entry to the binary and hints the loader to search additional path.
g++ -o TestSystemC ...your c++ files... -L/usr/local/systemc-2.3.0/lib-linux64 -lsystemc-2.3.0 -Wl,-rpath,/usr/local/systemc-2.3.0/lib-linux64
然后,博主就尝试了下:
alex@daemon:~/Desktop$ g++ test.cpp -Isystemc/include -Lsystemc/lib-linux -lsystemc
alex@daemon:~/Desktop$ ./a
adders/ a.out
alex@daemon:~/Desktop$ ./a.out
./a.out: error while loading shared libraries: libsystemc-2.3.1.so: cannot open shared object file: No such file or directory
alex@daemon:~/Desktop$ ls
adders config_file Kali系列教程 Qt test.cpp
a.out digital_work os systemc 信号作业
alex@daemon:~/Desktop$ export LD_LIBRARY_PATH=/home/alex/Desktop/systemc/lib-linux:$LD_LIBRARY_PATH
alex@daemon:~/Desktop$ ./a.out
SystemC 2.3.1-Accellera --- Jun 29 2018 17:06:10
Copyright (c) 1996-2014 by all Contributors,
ALL RIGHTS RESERVED
Hello, SystemC!
最后完美解决! 为了以后直接可以使用建议将上述的export语句加入到.bashrc文件中, 同时专门写一个makefile,便于以后的使用。