Cross compile with LAPACK library on Nokia N9: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
No edit summary
 
No edit summary
Line 1: Line 1:
=Cross compile a Qt program for Harmattan using the <span class="caps">LAPACK</span> library=
[toc align_right=&quot;yes&amp;quot; depth=&quot;3&amp;quot;]<br />[[Category:Developing_with_Qt::Harmattan]]<br />[[Category:Developing_with_Qt::Workarounds]]


==Summary==
= Cross compile a Qt program for Harmattan using the LAPACK library =


[http://www.netlib.org/lapack/#_presentation <span class="caps">LAPACK</span>] ''[netlib.org]'' provides routines for solving systems of simultaneous linear equations, least-squares solutions of linear systems of equations, eigenvalue problems, and singular value problems. It is written in Fortran 90.
== Summary ==


It is not obvious how to link against <span class="caps">LAPACK</span> when cross-compiling a program for use on a Harmattan device as the ‘official’ method doesn’t seem to work as expected.
&quot;LAPACK&amp;quot;:http://www.netlib.org/lapack/#_presentation provides routines for solving systems of simultaneous linear equations, least-squares solutions of linear systems of equations, eigenvalue problems, and singular value problems. It is written in Fortran 90.


Workarounds seem to be required both for obtaining the libraries and for cross-compiling the program. An interpretation of the ‘official’ method, and a workaround method, are included below. This method is based on the method by avieli [http://talk.maemo.org/showpost.php?p=1103831&postcount=9 here] ''[talk.maemo.org]''.
It is not obvious how to link against LAPACK when cross-compiling a program for use on a Harmattan device as the 'official' method doesn't seem to work as expected.


==Method 1: The ‘Official’ Method==
Workarounds seem to be required both for obtaining the libraries and for cross-compiling the program. An interpretation of the 'official' method, and a workaround method, are included below. This method is based on the method by avieli &quot;here&amp;quot;:http://talk.maemo.org/showpost.php?p=1103831&amp;amp;postcount=9.


Ideally the Nokia Qt Creator Harmattan <span class="caps">SDK</span> would come with <span class="caps">LAPACK</span>, <span class="caps">BLAS</span> and <span class="caps">GFORTRAN</span> libararies as standard. However, this does not appear to be the case. If it were you should then be able to add the following lines of code to your project file:
== Method 1: The 'Official' Method ==
 
Ideally the Nokia Qt Creator Harmattan SDK would come with LAPACK, BLAS and GFORTRAN libararies as standard. However, this does not appear to be the case. If it were you should then be able to add the following lines of code to your project file:
 
<code> CONFIG+=link_pkgconfig<br /> PKGCONFIG+=libblas<br /> PKGCONFIG+=liblapack<br /> PKGCONFIG+=libgfortran<br /></code>


QMake would then create a makefile and the libraries would be automatically linked when compilation took place.
QMake would then create a makefile and the libraries would be automatically linked when compilation took place.
Line 17: Line 21:
At the moment the problems seem to be:
At the moment the problems seem to be:


# These libraries are not in the standard Nokia Qt Creator <span class="caps">SDK</span> install (with Harmattan options selected) they have to be downloaded and pkg-config files constructed manually;
# These libraries are not in the standard Nokia Qt Creator SDK install (with Harmattan options selected) - they have to be downloaded and pkg-config files constructed manually;
# QMake does not seem to correctly construct the makefile with references to these libraries it only references the directories where these libraries reside (i.e. my makefile did not include the ‘-l’ statements which referenced the specific libraries.)
# QMake does not seem to correctly construct the makefile with references to these libraries - it only references the directories where these libraries reside (i.e. my makefile did not include the '<s>l' statements which referenced the specific libraries.)
<br />h2. Method 2: The 'Workaround' Method
<br />This method is based on the method by avieli &quot;here&amp;quot;:http://talk.maemo.org/showpost.php?p=1103831&amp;amp;postcount=9.
<br />h3. Step 1</s> Find the libraries and download them to your desktop


==Method 2: The ‘Workaround’ Method==
* Open the xterm on your Nokia N9
* Type &quot;devel-su&amp;quot; and password &quot;rootme&amp;quot;
* Type &quot;apt-get install libblas3gf&amp;quot;, &quot;apt-get install liblapack&amp;quot; and &quot;apt-get install libgfortran&amp;quot;


This method is based on the method by avieli [http://talk.maemo.org/showpost.php?p=1103831&postcount=9 here] ''[talk.maemo.org]''.
Note: you can also download the LAPACK and BLAS (but not GFORTRAN?) libraries onto your desktop<br />http://harmattan-dev.nokia.com/pool/harmattan/free/l/lapack/<br />http://harmattan-dev.nokia.com/pool/harmattan/free/b/blas/


===Step 1 – Find the libraries and download them to your desktop===
* Copy these files from /usr/lib on N9 to your &quot;MyDocs&amp;quot; directory then onto your desktop
 
* Open the xterm on your Nokia N9
* Type “devel-su” and password “rootme”
* Type “apt-get install libblas3gf”, “apt-get install liblapack” and “apt-get install libgfortran”
 
Note: you can also download the <span class="caps">LAPACK</span> and <span class="caps">BLAS</span> (but not <span class="caps">GFORTRAN</span>?) libraries onto your desktop<br />http://harmattan-dev.nokia.com/pool/harmattan/free/l/lapack/<br />http://harmattan-dev.nokia.com/pool/harmattan/free/b/blas/
 
* Copy these files from /usr/lib on N9 to your “MyDocs” directory then onto your desktop


* Move the libraries to your Harmattan libraries area on your desktop (e.g. /opt/QtSDK/Madde/sysroots/harmattan_sysroot_10.2011.34-1_slim/lib)
* Move the libraries to your Harmattan libraries area on your desktop (e.g. /opt/QtSDK/Madde/sysroots/harmattan_sysroot_10.2011.34-1_slim/lib)


===Step 2: Create pkg-config files for each library===
=== Step 2: Create pkg-config files for each library ===
 
For each library create a “.pc” file to describe its location:
 
===Step 3 – Open your project file in Qt Creator===
 
Add the links to the libraries to your “.pro” project file:
 
===Step 4 – Select ‘Build’-‘Run qmake’ from within Qt Creator===


===Step 5 – Manually edit the Makefile it creates to include references to the <span class="caps">LAPACK</span>, <span class="caps">BLAS</span> and gfortran libraries===
For each library create a &quot;.pc&amp;quot; file to describe its location:


i.e. convert this:<br />
<code># Package Information for pkg-config


Click the ‘Build’ button to compile the program as you would usually.
prefix=/opt/QtSDK/Madde/sysroots/harmattan_sysroot_10.2011.34-1_slim/<br />exec_prefix=${prefix}<br />libdir=${exec_prefix}/lib/<br />includedir=${prefix}/include/<br />Name: lapack<br />Description: LAPACK library<br />Version: Unknown<br />Libs: -L${libdir}<br />Cflags: <s>I${includedir}</code>
<br />Save these files to the /usr/lib/pkgconfig directory in your Harmattan area (e.g. <code>/opt/QtSDK/Madde/sysroots/harmattan_sysroot_10.2011.34-1_slim/usr/lib/pkgconfig<code>)
<br />h3. Step 3</s> Open your project file in Qt Creator


===Step 6 – Run the program on your remote device===
Add the links to the libraries to your &quot;.pro&amp;quot; project file:


The <span class="caps">BLAS</span>, <span class="caps">LAPACK</span> and gfrotran libraries are already installed from the earlier step.
</code> CONFIG+=link_pkgconfig<br /> PKGCONFIG+=libblas<br /> PKGCONFIG+=liblapack<br /> PKGCONFIG+=libgfortran<br /><code>


If anyone can update this with a “How to define dependencies for a fresh install on a Harmattan device” it would be much appreciated!
=== Step 4 - Select 'Build'<s>'Run qmake' from within Qt Creator
<br />h3. Step 5</s> Manually edit the Makefile it creates to include references to the LAPACK, BLAS and gfortran libraries ===


===Categories:===
i.e. convert this:<br /></code></code>LIBS = $(SUBLIBS) -L/opt/QtSDK/Madde/sysroots/harmattan_sysroot_10.2011.34-1_slim/usr/lib -L/usr/X11R6/lib -L/opt/QtSDK/Madde/sysroots/harmattan_sysroot_10.2011.34-1_slim/lib/lapack/ -L/usr/lib -lQtOpenGL -lQtGui -lQtCore -lGLESv2 -lpthread </code><br /><code> to this:<br /></code>LIBS = $(SUBLIBS) -L/opt/QtSDK/Madde/sysroots/harmattan_sysroot_10.2011.34-1_slim/usr/lib -L/usr/X11R6/lib -L/opt/QtSDK/Madde/sysroots/harmattan_sysroot_10.2011.34-1_slim/lib/lapack/ -l:libblas.so -l:liblapack.so -l:libgfortran.so.3 -L/usr/lib -lQtOpenGL -lQtGui -lQtCore -lGLESv2 <s>lpthread<br /><code>
<br />Click the 'Build' button to compile the program as you would usually.
<br />h3. Step 6</s> Run the program on your remote device


* [[:Category:Developing with Qt|Developing_with_Qt]]
The BLAS, LAPACK and gfrotran libraries are already installed from the earlier step.
** [[:Category:Developing with Qt::Harmattan|Harmattan]]
* [[:Category:Developing with Qt::Workarounds|Workarounds]]

Revision as of 10:38, 24 February 2015

[toc align_right="yes&quot; depth="3&quot;]

Cross compile a Qt program for Harmattan using the LAPACK library

Summary

"LAPACK&quot;:http://www.netlib.org/lapack/#_presentation provides routines for solving systems of simultaneous linear equations, least-squares solutions of linear systems of equations, eigenvalue problems, and singular value problems. It is written in Fortran 90.

It is not obvious how to link against LAPACK when cross-compiling a program for use on a Harmattan device as the 'official' method doesn't seem to work as expected.

Workarounds seem to be required both for obtaining the libraries and for cross-compiling the program. An interpretation of the 'official' method, and a workaround method, are included below. This method is based on the method by avieli "here&quot;:http://talk.maemo.org/showpost.php?p=1103831&amp;postcount=9.

Method 1: The 'Official' Method

Ideally the Nokia Qt Creator Harmattan SDK would come with LAPACK, BLAS and GFORTRAN libararies as standard. However, this does not appear to be the case. If it were you should then be able to add the following lines of code to your project file:

 CONFIG+=link_pkgconfig<br /> PKGCONFIG+=libblas<br /> PKGCONFIG+=liblapack<br /> PKGCONFIG+=libgfortran<br />

QMake would then create a makefile and the libraries would be automatically linked when compilation took place.

At the moment the problems seem to be:

  1. These libraries are not in the standard Nokia Qt Creator SDK install (with Harmattan options selected) - they have to be downloaded and pkg-config files constructed manually;
  2. QMake does not seem to correctly construct the makefile with references to these libraries - it only references the directories where these libraries reside (i.e. my makefile did not include the 'l' statements which referenced the specific libraries.)


h2. Method 2: The 'Workaround' Method
This method is based on the method by avieli "here&quot;:http://talk.maemo.org/showpost.php?p=1103831&amp;postcount=9.
h3. Step 1
Find the libraries and download them to your desktop

  • Open the xterm on your Nokia N9
  • Type "devel-su&quot; and password "rootme&quot;
  • Type "apt-get install libblas3gf&quot;, "apt-get install liblapack&quot; and "apt-get install libgfortran&quot;

Note: you can also download the LAPACK and BLAS (but not GFORTRAN?) libraries onto your desktop
http://harmattan-dev.nokia.com/pool/harmattan/free/l/lapack/
http://harmattan-dev.nokia.com/pool/harmattan/free/b/blas/

  • Copy these files from /usr/lib on N9 to your "MyDocs&quot; directory then onto your desktop
  • Move the libraries to your Harmattan libraries area on your desktop (e.g. /opt/QtSDK/Madde/sysroots/harmattan_sysroot_10.2011.34-1_slim/lib)

Step 2: Create pkg-config files for each library

For each library create a ".pc&quot; file to describe its location:

# Package Information for pkg-config

prefix=/opt/QtSDK/Madde/sysroots/harmattan_sysroot_10.2011.34-1_slim/<br />exec_prefix=${prefix}<br />libdir=${exec_prefix}/lib/<br />includedir=${prefix}/include/<br />Name: lapack<br />Description: LAPACK library<br />Version: Unknown<br />Libs: -L${libdir}<br />Cflags: <s>I${includedir}


Save these files to the /usr/lib/pkgconfig directory in your Harmattan area (e.g.

/opt/QtSDK/Madde/sysroots/harmattan_sysroot_10.2011.34-1_slim/usr/lib/pkgconfig<code>)
<br />h3. Step 3</s> Open your project file in Qt Creator

Add the links to the libraries to your &quot;.pro&amp;quot; project file:

CONFIG+=link_pkgconfig
PKGCONFIG+=libblas
PKGCONFIG+=liblapack
PKGCONFIG+=libgfortran

=== Step 4 - Select 'Build'<s>'Run qmake' from within Qt Creator
<br />h3. Step 5</s> Manually edit the Makefile it creates to include references to the LAPACK, BLAS and gfortran libraries ===

i.e. convert this:<br />

LIBS = $(SUBLIBS) -L/opt/QtSDK/Madde/sysroots/harmattan_sysroot_10.2011.34-1_slim/usr/lib -L/usr/X11R6/lib -L/opt/QtSDK/Madde/sysroots/harmattan_sysroot_10.2011.34-1_slim/lib/lapack/ -L/usr/lib -lQtOpenGL -lQtGui -lQtCore -lGLESv2 -lpthread

 to this:<br />

LIBS = $(SUBLIBS) -L/opt/QtSDK/Madde/sysroots/harmattan_sysroot_10.2011.34-1_slim/usr/lib -L/usr/X11R6/lib -L/opt/QtSDK/Madde/sysroots/harmattan_sysroot_10.2011.34-1_slim/lib/lapack/ -l:libblas.so -l:liblapack.so -l:libgfortran.so.3 -L/usr/lib -lQtOpenGL -lQtGui -lQtCore -lGLESv2 lpthread


Click the 'Build' button to compile the program as you would usually.
h3. Step 6
Run the program on your remote device

The BLAS, LAPACK and gfrotran libraries are already installed from the earlier step.