当前位置: 首页 > news >正文

systemC的安装

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,便于以后的使用。

转载于:https://blog.51cto.com/13824643/2134107

相关文章:

  • 利用hadoop来解决“共同好友”的问题
  • zabbix监控apache
  • 创建Windows窗体 : WinMain() 与 WndProc()
  • 不要再被骗了------QQ盗号原理大揭秘
  • Heroku安装与使用
  • webpack 4.14配置详解
  • 中间有文字的分割线效果
  • ie6,ie7下overflow失效解决方法
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 关于DAMAGE: after Normal block的问题 【from http://blog.sina.com.cn/s/blog_a4864fde01014962.html】...
  • ispoweroftwo 判断2的次幂【转】
  • 用 puppeteer 获取 jd 商品评论
  • LightOJ 1033 区间dp
  • 多线程停止的方法
  • Java 学习(18)--列表(List)/ 集合 (Set)/ 泛型 / Map
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • Android交互
  • co模块的前端实现
  • JS题目及答案整理
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • mysql中InnoDB引擎中页的概念
  • Puppeteer:浏览器控制器
  • SpiderData 2019年2月25日 DApp数据排行榜
  • Vue学习第二天
  • 不上全站https的网站你们就等着被恶心死吧
  • 从零开始的无人驾驶 1
  • 给初学者:JavaScript 中数组操作注意点
  • 构建二叉树进行数值数组的去重及优化
  • 离散点最小(凸)包围边界查找
  • 理解在java “”i=i++;”所发生的事情
  • 前端性能优化——回流与重绘
  • 前端自动化解决方案
  • 使用agvtool更改app version/build
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 与 ConTeXt MkIV 官方文档的接驳
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 阿里云重庆大学大数据训练营落地分享
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • 积累各种好的链接
  • ​学习一下,什么是预包装食品?​
  • #define与typedef区别
  • $.ajax()方法详解
  • (LeetCode C++)盛最多水的容器
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (三)uboot源码分析
  • (转) 深度模型优化性能 调参
  • ***检测工具之RKHunter AIDE
  • ./configure、make、make install 命令
  • .FileZilla的使用和主动模式被动模式介绍
  • .NET gRPC 和RESTful简单对比
  • .net 获取url的方法
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器