调程序
很久以前在VC下写的SystemC程序,现在想在linux下编译,出现了一系列问题。今天终于全解决了,对我这种linux零基础的人,对在linux下干活的复杂性不人性化深表鄙视。
linux下编译一个SystemC程序要自己写makefile,我不会。看SystemC的Userguide,给了一个写makefile的例子,我照葫芦画瓢。但他没说
TARGET_ARCH = gccsparcOS5
这行后边的参数是啥意思,需不需要改。编译出错。中间做了n种其他尝试后发现,这个参数应该改成SystemC原有makefile中TARGET_ARCH的参数
TARGET_ARCH = linux
编译完了后要对生成的波形图进行查看。需要软件gtkwave。下载后安装。在windows上这也就是个双击的事。这可倒好,照着install一行一行敲命令,到编译就出错了。查了n久,原来是缺少gtk+的包。下载又重新安装。
原来的SystemC程序编译通过了,可是产生的波形文件有错。大部分是Info,说IEEE的标准有所改变,原来的语法现在应该如何如何写一类。还有一个错误,非常诡异:
Error: (E115) sc_signal<T> cannot have more than one driver:
signal `a.signal_132' (sc_signal)
first driver `a.bmod.port_5' (sc_inout)
second driver `a.cmod.port_6' (sc_inout)
In file: ../../../../src/sysc/communication/sc_signal.cpp:126
把错误信息google了之后,发现是因为SystemC升级时多加了一个检查的限制,对旧程序不兼容,无论是官方网站,还是Releasenotes上写的解决方法都只有一句话:
把环境设置为setenv SC_SIGNAL_WRITE_CHECK DISABLE
不知道在精通的人眼里这句话是不是像空气一样透明,反正对于我来说,想雾气一样迷茫。我跟不知道这句话该往哪里加。加在sc_main函数里,函数外,宏定义中,都不行。
又接着搜,说是命令行中,到SystemC的objdir目录下,输入
setenv SC_SIGNAL_WRITE_CHECK DISABLE
试了,说不存在setenv这个命令
接着搜,说是在sc_main函数中加入
sc_report_handler::set_actions(SC_ID_MORE_THAN_ONE_SIGNAL_DRIVER, SC_DO_NOTHING);
试了,说SC_ID_MORE_THAN_ONE_SIGNAL_DRIVER没有声明。
再接着搜,说还可以命令行中,到SystemC的objdir目录下输入
export SC_SIGNAL_WRITE_CHECK=DISABLE
终于好了!!!
解决问题的兴奋之余,很想拜托linux别那么体现人的智商行不?也拜托帮人解决问题的人,别把人想的跟你那么聪明行不,就把人都当我这么白痴,解释的清楚点行不?
Google 就是好啊~
linux并非体现人的智商
而是一种严谨的科学工作态度
所有内容都模块化设计
windows才是把用户当傻瓜,一装就乱七八糟好几个GB
想分离都拆不出来
linux得以高速发展,就是因为微软的产品提供不了人们需要的特性
全模块化,简单,快捷,瘦身
我就需要一个只有100MB左右的命令行系统
谁愿意要若干GB的复杂图形环境,还老打补丁重启
同意狗狗和天魔,觉得微软像拼音输入法,而LINUX是5笔
因为linux的东西基本都是开源的,写开源程序的人一般不屑于花太多时间去写帮助文档。。。
所以我一直认为大众化的软件永远都需要公司来运作,要不然总是没有人写文档,没有人去改进用户体验
其實setenv 及export都是同樣功能:
改變環境變數。
而且必須在linux/unix的terminal下執行
(任何目錄輸入的效果都一樣)
通常開發linux/unix的程式如果需要改變環境變數的話,
如果前指令不行就改用後者,
有這次經驗以後
以後如果遇到相同指令,就知道他的意思了,
也就知道在何處輸入它。
並兩者都試試看。
也許這是為何文件未寫清楚地原因。
其實setenv 及export都是同樣功能:
改變環境變數。
而且必須在linux/unix的terminal下執行
(任何目錄輸入的效果都一樣)
通常開發linux/unix的程式如果需要改變環境變數的話,
如果前指令不行就改用後者,
有這次經驗以後
以後如果遇到相同指令,就知道他的意思了,
也就知道在何處輸入它。
並兩者都試試看。
也許這是為何文件未寫清楚地原因。
狗狗才,你真是才子一个,什么都懂,明年有机会去德国,到时看能不能去拜访你一下