【问题标题】:UVM-SystemC example run script not workingUVM-SystemC 示例运行脚本不起作用
【发布时间】:2016-07-22 18:52:44
【问题描述】:

我开发了一个 perl 脚本来运行 UVM-SystemC 示例代码。

#!/usr/bin/perl

use warnings;
use strict;

sub main();


my $CLIBS = "\$SYSTEMC_HOME/lib-linux64";
my $UVMCLIBS = "\$UVMSYSTEMC_HOME/lib-linux64";

my $CINC = "\$SYSTEMC_HOME/include";
my $UVMCINC = "\$UVMSYSTEMC_HOME/include";

main();



sub main(){

    eval{
        $ARGV[0];
    }or do{
        print("\n\tRun the script with SystemC <filename> as argument\n\n");
        exit 1;
    };

    system "g++ -I$CINC -I$UVMCINC -L$CLIBS -lsystemc -L$UVMCLIBS -luvm-systemc $ARGV[0] -Wl,-rpath,$CLIBS -Wl,-rpath,$UVMCLIBS";

    #system "./sim";

}

这里,$变量分别指向SystemC和UVM-SystemC安装的路径。并且脚本需要 *.cpp 文件作为 $ARGV[0] 的参数,这两个库示例命令都由make check 正常运行,但脚本给出了错误。详细错误日志error.log

【问题讨论】:

    标签: perl linker uvm systemc


    【解决方案1】:

    SystemC 和 UVM 库是否有可能使用比您的脚本使用的旧版本的 g++ 编译?我怀疑是由于这些错误:

    undefined reference to `uvm::uvm_report_warning(std::__cxx11::basic_string<char, std::char_traits<char>**, ...etc..
    undefined reference to `uvm::uvm_typeid_base::type_name[abi:cxx11]'
    

    看起来库可能是用 gcc 4.x 编译的,然后你的脚本正在执行 gcc 5.x,它使用了一个新的 ABI:

    https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html

    检查路径中的 g++ 版本:g++ --version

    【讨论】:

    • g++ --version 的输出是 g++ (Ubuntu 5.4.0-6ubuntu1~16.04.1) 5.4.0 20160609。在 uvm-systemc 库配置日志中使用了相同的 g++ 版本。
    • SystemC 库怎么样?它是用相同的方式编译的吗?如果您的可执行文件所需的任何库已使用 gcc 4.x 编译,则可能存在 ABI 不兼容问题。您可以尝试使用旧 ABI 重新编译可执行文件和 uvm-systemc lib:将 -D_GLIBCXX_USE_CXX11_ABI=0 添加到 CXXFLAGS 或 g++ 命令行。
    • 它仍然给出同样的错误。 uvm-systemc/objdir 中的 'make check' 工作正常并模拟所有示例。唯一的问题是我无法使用脚本运行它。
    【解决方案2】:

    看起来包含文件丢失的错误。这主要是因为脚本中的系统命令没有传递正确的变量。 perl 脚本使用$SYSTEMC_HOME,猜测是一个环境变量,但没有使用 $ENV 来读取它。 使用$ENV{'SYSTEMC_HOME'}获取shell的env变量中设置的值。

    my $CLIBS = "$ENV{'SYSTEMC_HOME'}/lib-linux64";
    

    链接到如何在 perl 中访问系统变量。 http://alvinalexander.com/perl/edu/articles/pl020002

    同时打印系统行以确认设置。

       print "g++ -I$CINC -I$UVMCINC -L$CLIBS -lsystemc -L$UVMCLIBS -luvm-systemc $ARGV[0] -Wl,-rpath,$CLIBS -Wl,-rpath,$UVMCLIBS";
    

    【讨论】:

    • 嗨,Rahul,我认为这不是问题。确认我已经尝试过你的建议。我仍然遇到同样的错误。打印显示正确的路径。
    猜你喜欢
    • 2018-12-21
    • 1970-01-01
    • 2013-09-18
    • 2021-03-07
    • 1970-01-01
    • 2018-02-15
    • 2017-04-21
    • 2013-01-21
    • 2021-04-24
    相关资源
    最近更新 更多