첫 번째로, 저는 이것에 대해 매우 새로운 것입니다. Sparc 프로세서가있는 Solaris 10에서 Sun Studio 12.3을 컴파일러로 사용하여 T1 아키텍처 및 시뮬레이션 모델링 도구 (http://www.oracle.com/technetwork/systems/opensparc/opensparc-t1-page-1444609.html)를 컴파일하려고합니다.T1 아키텍처 및 시뮬레이션 모델링 도구를 컴파일 할 수 없습니다.
"build_sas.sh"스크립트를 실행 중이고 컴파일 오류가 발생합니다.
--- Building n1 in fw ---
/opt/solarisstudio12.3/bin/CC -G -KPIC -fast -xO5 -DNDEBUG -DRS_INLINE=inline -DRS_MPSAS_COMPATIBLE -xarch=v9a -DHOST64BIT=1 -DN1_BOOTS10 -DMEMORY_SPARSE -I../../include/fw -I../../include/mmu -I../../include/strand -I../../include/core -I../../include/cpu -I../../include/asi -I../../include/system -I../../include/trap -I/scratch/sam-t1/devtools/64/include/python2.4 -c -o obj64opt_n1/Interface/XmlTokenizer.o Interface/XmlTokenizer.cc
CC: Warning: -xarch=v9a is deprecated, use -m64 -xarch=sparcvis instead
"Interface/XmlTokenizer.cc", line 157: Error: Formal argument value of type std::string & in call to Riesling::XmlTokenizer::CallBack::notify(std::string &) requires an lvalue.
"Interface/XmlTokenizer.cc", line 162: Error: Formal argument value of type std::string & in call to Riesling::XmlTokenizer::CallBack::notify(std::string &) requires an lvalue.
"Interface/XmlTokenizer.cc", line 167: Error: Formal argument value of type std::string & in call to Riesling::XmlTokenizer::CallBack::notify(std::string &) requires an lvalue.
3 Error(s) detected.
*** Error code 2
make: Fatal error: Command failed for target `obj64opt_n1/Interface/XmlTokenizer.o'
Current working directory /scratch/sam-t1/src/riesling-cm/riesling/src/fw
*** Error code 1
make: Fatal error: Command failed for target `fw'
소스 코드의 오류가 확실하지 않습니다. 다음은 소스 코드입니다.
#include "Interface/XmlTokenizer.h"
#include "StdMacros.h"
#include <sstream>
using namespace std;
using namespace Riesling;
XmlTokenizer::XmlTokenizer() :
startTagHandler_(NULL),
endTagHandler_(NULL),
dataHandler_(NULL)
{}
XmlTokenizer::XmlTokenizer(string &xmlString,
CallBack *start,
CallBack *end,
CallBack *data ) :
startTagHandler_(start),
endTagHandler_(end),
dataHandler_(data)
{
tokenize(xmlString);
}
XmlTokenizer::XmlTokenizer(const XmlTokenizer & orig) :
startTagHandler_(orig.startTagHandler_),
endTagHandler_(orig.endTagHandler_),
dataHandler_(orig.dataHandler_)
{}
XmlTokenizer::~XmlTokenizer()
{}
const XmlTokenizer &
XmlTokenizer::operator=(const XmlTokenizer & rhs)
{
startTagHandler_ = rhs.startTagHandler_;
endTagHandler_ = rhs.endTagHandler_;
dataHandler_ = rhs.dataHandler_;
return *this;
}
bool
XmlTokenizer::operator==(const XmlTokenizer & rhs) const
{
return endTagHandler_ == rhs.endTagHandler_ &&
startTagHandler_ == rhs.startTagHandler_ &&
dataHandler_ == rhs.dataHandler_;
}
string
XmlTokenizer::toString() const
{
ostringstream os;
return os.str();
}
int
XmlTokenizer::nextToken(string::iterator &start,
string::iterator &end,
const string::iterator &endOfString)
{
int result = -1;
start = end;
while(start != endOfString && *start != '<' && *start != '>'){
++start;
if(*start == '\\' && start != endOfString){
++start;
}
}
if(start == endOfString){
return END_OF_STRING;
}
end = start;
++end;
while(end != endOfString && *end != '<' && *end != '>'){
++end;
if(*end == '\\' && end != endOfString){
++end;
}
}
if(end == endOfString){
return END_OF_STRING;
}
if(*start == '<' && *end == '>'){
string::iterator i = start;
while(i != end && *i != '/'){
++i;
}
if(i == end){
result = START_TAG;
} else {
result = END_TAG;
}
} else if(*start == '>' && *end == '<') {
++start;
result = DATA;
} else {
string msg("Invalid XML \"");
msg.append(string(start, end)).append("\"");
RIESLING_THROW_DOMAIN_ERROR(msg);
}
return result;
}
void
XmlTokenizer::tokenize(string &xmlSt)
{
int currToken;
string::iterator start = xmlSt.begin();
string::iterator end = xmlSt.begin();
while((currToken = nextToken(start, end, xmlSt.end())) != END_OF_STRING) {
switch(currToken){
case START_TAG:
if(startTagHandler_){
startTagHandler_->notify(string(start + 1, end));
}
break;
case END_TAG:
if(endTagHandler_){
endTagHandler_->notify(string(start + 2, end));
}
break;
case DATA:
if(dataHandler_){
dataHandler_->notify(string(start, end));
}
break;
default:
RIESLING_THROW_DOMAIN_ERROR("An unknown error occured");
}
}
}
void
XmlTokenizer::setStartTagHandler(CallBack *startTagHandler)
{
startTagHandler_ = startTagHandler;
}
void
XmlTokenizer::setEndTagHandler(CallBack *endTagHandler)
{
endTagHandler_ = endTagHandler;
}
void
XmlTokenizer::setDataHandler(CallBack *dataHandler)
{
dataHandler_ = dataHandler;
}
정말로 도움/제안을 부탁드립니다.
감사합니다.
">은 isainfo -bv : 64 비트 SPARCV9 응용 프로그램 : vis2 마주" 이 그래서, 그것은 sparcvis을 지원하거나 내가 먼저 가서 어쨌든 네이티브 -xarch =를 사용한다는 의미는 무엇입니까? 감사합니다. – user3285014
'vis2 vis'가 있으면 T1이 아니며'sparcvis '를 지원합니다. '-xarch = native'는 프로세서에 가장 적합한 코드를 만들지 만, 당신이 원하는 것을 정확히 말할 수 있습니다. 'vis2'가있는 한, 32 비트 바이너리에는'-xarch = sparcvis2'를, 64 비트에는'-xarch = v9b'를 사용할 수 있습니다. – nudzo