关于本文
从零开始学习VCS,之前手打命令成功跑过vcs仿真,这次希望通过makefile实现自动化,遇到了许多问题,花了三四个小时熬到凌晨3点才解决,记录一下我的感想。
接下来这些问题如果你在网上搜一下会发现很多都有被讨论过,甚至有些十分幼稚,类似于码农“debug两小时发现是一个分号用了全角”的这类令人啼笑皆非的错误,这里也记录下来。
环境
Ubuntu16.04;
vcs2016;
已将 gcc 和 g++ 降级为 4.8。这一点还挺关键,可以避免后面的许多问题。
进击的调试之路
第一版makefile
会这么写显然是没先去网上找找别人的脚本,不过找到了也看不懂那一堆命令是啥意思。如此简陋的makefile能运行才怪了。
注意如果直接在终端输入:
vcs -f filelist +v2k -debug_all
是可以正常运行的,但如果想make com
就会看到下面这个错误:
这是关于共享库文件 libelf.so.1
文件的错误,在网上搜索后发现许多程序编译也会出现这类错误,包括各种 libxxx.so.x
等的错误。最开始我查到应当要找到 libelf.so.1
文件的位置并添加到 ld.so.conf
里去:
echo "/usr/.../libelf.so.1">>/etc/ld.so.conf
ldconfig
失败了,然后认为是vcs需要32位的 libelf.so.1
的问题,就去安装各种32位的共享库文件,比如这样:
apt-get install libelf-dev:i386
或者是去解决 gcc、g++ 版本兼容性的问题:
apt-get install gcc-multilib g++-multilib
还真有效果,不过是头痛医头,脚痛医脚的效果,因为后来又出现了一堆 libgcc
、libstdc++
等各种文件的错误。
最后,解决方案十分简单,只需要加上一条这样的命令:
-full64
第二版makefile
一劳永逸地解决了libxxx.x
文件的问题。虽然仅这么一个问题折磨了我两个多小时,
然后是一番震撼的景象:
这两个问题在网上都有人提出过,解决方案是加上下面的命令:
-cpp g++-4.8
-cc gcc-4.8
-LDFLAGS -Wl,--no-as-needed
具体的原因我没有去深究,但总之和 gcc、g++ 版本有关。所以安装vcs之前就请先把 gcc 和 g++ 的版本降下来。
最终版makefile
就这些问题让我熬到凌晨3点,想想挺无语的。最后这版只要环境没问题我想应该可以拿去直接用了吧,配合dve可以看到波形了,随便仿了个状态机。
make com
make sim