Kepler
Kepler

Reputation: 57

Linking a library in g++ doesn't work

I am trying to compile a .cpp-file which uses a matrix-library. The library-files libnewmat.a and libnewmat.so are in the path /usr/lib64 . The include-files are in path /usr/include/newmat , so I tried (several ways) to compile i.e. with:

g++ -I/usr/include -L/usr/lib64 -lnewmat new.cpp -o new3

but the compiler doesn't find the library. The content of the .cpp is:

#include <iostream>
#include <newmat/newmat.h>
#include <newmat/newmatio.h>

using namespace std;

int main()
{
Matrix A(2,2);
Real b[] = {1,2,3,4};
A << b;

cout << A << endl;

return 0;
}

The compiler says:

test.cpp: In function ‘int main()’:
test.cpp:9: error: ‘Matrix’ was not declared in this scope
test.cpp:9: error: expected ‘;’ before ‘A’
test.cpp:10: error: ‘Real’ was not declared in this scope
test.cpp:10: error: expected ‘;’ before ‘b’
test.cpp:11: error: ‘A’ was not declared in this scope
test.cpp:11: error: ‘b’ was not declared in 

this scope

Could You provide me with the correct c++ code, or the correct command line instruction?

Thanks, Kepler

Upvotes: 0

Views: 1051

Answers (2)

JohnKlehm
JohnKlehm

Reputation: 2398

If you recently installed this library yourself you probably need to run sudo ldconfig to load the so into the linker cache.

EDIT: As Kevin said not a linking error that you're getting.

Perhaps it's a name space issue? using namespace NEWMAT;

according to this: http://www.robertnz.net/nm10.htm#namesp

Upvotes: 1

KevinDTimm
KevinDTimm

Reputation: 14376

This isn't a library problem - it's a compiler problem - it can't find any definition for Matrix (probably in your include files, but we can't determine that with the information given)

[edit]
Ascertain if your classes in the include files are being referenced correctly
[/edit]

Upvotes: 0

Related Questions