2016-07-22 1 views
0

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"; 

} 

여기에서 $ 변수는 SystemC 및 UVM-SystemC 설치 경로를 나타냅니다. 그리고 스크립트는 $ ARGV [0]의 인수로 * .cpp 파일을 기대합니다. 두 라이브러리 예제는 모두 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의 컴파일 된 수 있습니다 다음 스크립트는 새로운 ABI를 사용 GCC 5.x의를 실행 :

당신이 당신의 경로에 g ++에 대한 어떤 버전을 https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html

확인 : 인클루드 파일이없는 것처럼 g++ --version

+0

출력 g ++ --version IS g ++ (우분투 5.4.0-6ubuntu1 ~ 16.04.1) 같은 g ++ 버전을 사용하는 UVM-SystemC를 라이브러리 설정 로그에서 5.4.0 20160609.. – MayurKubavat

+0

SystemC 라이브러리는 어떻습니까? 그것은 동일하게 컴파일됩니까? 실행 파일에 필요한 라이브러리가 gcc 4.x로 컴파일 된 경우 ABI 비 호환성이있을 수 있습니다. 이전 ABI를 사용하여 실행 파일 및 uvm-systemc lib를 다시 컴파일 할 수 있습니다. -D_GLIBCXX_USE_CXX11_ABI = 0을 CXXFLAGS 또는 g ++ 명령 줄에 추가합니다. –

+0

여전히 같은 오류가 발생합니다. uvm-systemc/objdir에서 'make check'가 잘 작동하고 모든 예제를 시뮬레이트합니다. 단 한가지는 스크립트로 실행할 수 없다는 것입니다. – MayurKubavat

0

그것은 오류가 보인다. 그 대부분은 스크립트의 시스템 명령이 올바른 변수를 전달하지 않았기 때문입니다. perl 스크립트는 $SYSTEMC_HOME을 사용하고 있습니다. 추측은 env 변수이지만 $ ENV를 사용하여 읽지 않습니다. $ENV{'SYSTEMC_HOME'}을 사용하여 쉘의 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

안녕 Rahul, 나는 thats 문제라고 생각하지 않는다. 확인을 위해 귀하의 제안을 시도했습니다. 여전히 같은 오류가 발생합니다. 인쇄가 적절한 경로를 나타내고 있습니다. – MayurKubavat

관련 문제