2016-07-22 42 views
0

我開發了一個perl腳本來運行UVM-SystemC示例代碼。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"; 

} 

這裏,$ variables指向SystemC和UVM-SystemC安裝的相應路徑。並且腳本期望* .cpp文件作爲參數到$ ARGV [0]兩個庫示例命令通過make check正確運行,但腳本發出錯誤。詳細的錯誤日誌error.log

回答

0

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

+0

g ++ --version的輸出是g ++(Ubuntu 5.4.0-6ubuntu1〜16.04.1)5.4.0 20160609.在uvm-systemc庫配置日誌中使用了相同的g ++版本。 – MayurKubavat

+0

SystemC庫怎麼樣?它是否編譯相同?如果您的可執行文件需要的庫已經使用gcc 4.x編譯,則可能存在ABI不兼容問題。您可以嘗試使用舊的ABI重新編譯可執行文件和uvm-systemc庫:將-D_GLIBCXX_USE_CXX11_ABI = 0添加到CXXFLAGS或g ++命令行。 –

+0

它仍然給出相同的錯誤。並且在uvm-systemc/objdir中'make check'工作正常並且模擬所有的例子。唯一的問題是我無法用腳本運行它。 – MayurKubavat

0

它的錯誤看起來像包括文件丟失。其主要原因是腳本中的系統命令沒有傳遞正確的變量。 perl腳本使用$SYSTEMC_HOME,它猜測是一個env變量,但不使用$ 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"; 
+0

嗨拉胡爾,我不認爲這是一個問題。確認我已經嘗試了您的建議。我仍然遇到同樣的錯誤。打印顯示適當的路徑。 – MayurKubavat