Я построил matio используя предоставленные инструкции Вот. Но когда я пытаюсь запустить приведенный ниже код, я получаю следующую ошибку:
/tmp/ccIrtdDv.o: In function `main':
test.cpp:(.text+0x39): undefined reference to `Mat_Open'
test.cpp:(.text+0xaa): undefined reference to `Mat_VarRead'
test.cpp:(.text+0x20b): undefined reference to `Mat_VarRead'
test.cpp:(.text+0x359): undefined reference to `Mat_VarRead'
test.cpp:(.text+0x43c): undefined reference to `Mat_VarRead'
test.cpp:(.text+0x51a): undefined reference to `Mat_Close'
collect2: ld returned 1 exit status
Вот код, который я написал.
#include <iostream>
#include <matio.h>
#define tS(x) std::cout<<"\t"<<(#x)<<" == "<<(x)<<"\n"int main(int argc, char **argv)
{
const char *fileName = argc==1?"./S.mat":argv[1] ;
mat_t *mat = Mat_Open(fileName,MAT_ACC_RDONLY);
if(mat)
{
std::cout<<"Otwarto plik do odczytu\n\tmat == "<<mat<<"\n" ;
matvar_t *matVar=0 ;
std::cout<<"Wypisujemy dane\n\n" ;
std::cout<<"x:\n" ;
matVar = Mat_VarRead(mat, (char*)"x") ;
if(matVar)
{
unsigned xSize = matVar->nbytes/matVar->data_size ;
const double *xData = static_cast<const double*>(matVar->data) ;
for(int i=0; i<xSize; ++i)
{
std::cout<<"\tx["<<i<<"] = "<<xData[i]<<"\n" ;
}
std::cout<<"\n" ;
for(int i=0; i<matVar->rank; ++i)
{
std::cout<<"\tdim["<<i<<"] == "<<matVar->dims[i]<<"\n" ;
}
}
std::cout<<"y:\n" ;
matVar = Mat_VarRead(mat, (char*)"y") ;
unsigned ySize = matVar->nbytes/matVar->data_size ;
const double *yData = static_cast<const double*>(matVar->data) ;
for(int i=0; i<ySize; ++i)
{
double d = yData[i] ;
std::cout<<"\ty["<<i<<"] = "<<d<<"\n" ;
}
std::cout<<"\n" ;
for(int i=0; i<matVar->rank; ++i)
{
std::cout<<"\tdim["<<i<<"] == "<<matVar->dims[i]<<"\n" ;
}
std::cout<<"minX, step:\n";
matVar = Mat_VarRead(mat, (char*)"minX") ;
const double *minXData = static_cast<const double*>(matVar->data) ;
std::cout<<"\tminX = "<<minXData[0]<<"\n" ;
std::cout<<"\n" ;
for(int i=0; i<matVar->rank; ++i)
{
std::cout<<"\tdim["<<i<<"] == "<<matVar->dims[i]<<"\n" ;
}
matVar = Mat_VarRead(mat, (char*)"step") ;
const double *stepData = static_cast<const double*>(matVar->data) ;
std::cout<<"\tstep = "<<stepData[0]<<"\n" ;
std::cout<<"\n" ;
for(int i=0; i<matVar->rank; ++i)
{
std::cout<<"\tdim["<<i<<"] == "<<matVar->dims[i]<<"\n" ;
}
Mat_Close(mat);
}
else
{
std::cout<<"Nie można otworzyć pliku\n" ;
return 1;
}
return 0;
}
Я компилирую код, используя:
g++ -I/usr/include -L/usr/local/lib test.cpp -o test
Есть ли проблема с установкой, потому что я просто следовал инструкциям в README. Если нет, то как я могу это исправить? Заранее спасибо.
Вы должны указать опцию -l. Компилятор не сканирует все библиотеки, чтобы найти символы. F / е:
g++ -I/usr/include -L/usr/local/lib -lmatio test.cpp -o test
Других решений пока нет …