We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
I am trying to run the Armadillo Linear Algebra package on my Altera Cyclone V.
Armadillo: C++ linear algebra library
I get it to work with general Linux GCC and it runs on my Red Hat computer
Invoking: GCC C++ Compilerg++ -I/usr/include -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/Armadillo_Test.d" -MT"src/Armadillo_Test.d" -o "src/Armadillo_Test.o" "../src/Armadillo_Test.cpp"Finished building: ../src/Armadillo_Test.cpp Building target: Armadillo_TestInvoking: GCC C++ Linkerg++ -L/usr/lib64 -o "Armadillo_Test" ./src/Armadillo_Test.o -lm -larmadillo -llapack -lblas -larpackFinished building target: Armadillo_Test
When I try to use the DS5 tool chain I get
Invoking: GCC C++ Compiler
arm-linux-gnueabihf-g++ -I/usr/include -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/Armadillo_Test.d" -MT"src/Armadillo_Test.d" -o "src/Armadillo_Test.o" "../src/Armadillo_Test.cpp"
Finished building: ../src/Armadillo_Test.cpp
Building target: Armadillo_Test
Invoking: GCC C++ Linker
arm-linux-gnueabihf-g++ -L/usr/lib64 -o "Armadillo_Test" ./src/Armadillo_Test.o -lm -larmadillo -llapack -lblas -larpack
/usr/lib64/libarmadillo.so: file not recognized: File format not recognized
collect2: error: ld returned 1 exit status
So it works with g++ but not with arm-linux-gnueabihf-g++. How should I build the library? I just built the default way. cmake . make and make install. Any ideas what I should do? Can I even run this library on the Cyclone?
Hi bobo,
Looks like the last command is failing because it is trying to link against host libraries (from /usr/lib64) which are probably not compiled for ARM architecture. If you were compiling on your target then this would not be a problem. As we are cross compiling here, things are slightly tougher.
The steps taken to build libarmidillo.so from this post look promising http://stackoverflow.com/questions/21263427/cross-compiling-armadillo-linear-algebra-library
To help link your applications the gcc compiler in DS-5 provides two differently built libc system root’s, hardfloat (hf) and softfloat, but ideally you’d want to link against the system root built for your device. To include headers you could point to DS-5/sw/gcc/arm-linux-gnueabihf/libc/usr/include/; and select the appropriate system libraries from DS-5/sw/gcc/arm-linux-gnueabihf/libc/usr/lib.
As long as you are building for an ABI that is compatible with your target filesystem ABI then your application should run (presuming the C libraries are compatible; older versions are normally compatible with newer ones). You can specify the ABI by selecting a combination of the appropriate –mfloat-abi and –mfpu switches, but I think the default for is hardfloat for arm-linux-gnueabihf.
Hope this helps