Seite 1 von 1

openMP Linux Ubuntu 10.4 LTS Kompilier Probleme

Verfasst: 21. Mai 2010 11:27
von Halcom
Hallo,

ich bin noch ziemlich neu in der Linux Welt unterwegs und entsprechend unerfahren. Ich habe mein Program welches unter Windows läuft bereits erfolgreich unter Linux laufen.
Nun wollte ich mich ein wenig mit openMP beschäftigen. Ich habe ein paar einfache for Schleifen mit #pragma omp parallel for parallelisiert. Beim kompilieren erhalte ich aber nun Fehlermeldungen.

/home/mkan/workspace/ImageCapture/Source/ABSGUIBase/GUIHelper.h:306: undefined reference to `omp_get_thread_num'
/home/mkan/workspace/ImageCapture/Source/ABSGUIBase/GUIHelper.h:305: undefined reference to `GOMP_parallel_start'
/home/mkan/workspace/ImageCapture/Source/ABSGUIBase/GUIHelper.h:305: undefined reference to `GOMP_parallel_end'

Code: Alles auswählen

#include "omp.h"
....
QString ompString = QString("Number of OpenMP Threads: %1").arg(omp_get_num_threads());
qDebug(ompString.toAscii().data());
....
#pragma omp parallel for
for(int i = 0; i < sampleCount; i++)
  source16[i] = bitMask & (source16[i] >> bitshift);
omp.h habe ich includiert.

Im .pro file QMAKE_CXXFLAGS += -fopenmp hinzugefügt.

Kompiler ist der gcc 4.4.4 der Eigentlich openMP unterstützen sollte.

Ich habe auch einmal die /usr/lib/libgomp.so.1 includiert, dann kompiliert er zwar, zeigt mir auf meinem Quad Core aber nur bei omp_get_num_threads() nur einen Thread.
Wäre nett wenn mir jemand hilft wo mein Denkfehler liegt.

Gruß

Verfasst: 21. Mai 2010 11:30
von franzf
Die libopenmp.so includiert man auch nicht die linkt man!
Das machst du mit "LIBS += -lopenmp" in deinem .pro

Verfasst: 21. Mai 2010 13:04
von Halcom
Vielen dank erst mal.

Ich meinte natürlich linken.

Das klingt sehr vielversprechend, leider findet er die bei mir nicht.

/usr/bin/ld: cannot find -lopenmp
collect2: ld returned 1 exit status

Verfasst: 21. Mai 2010 13:07
von franzf
Halcom hat geschrieben:Das klingt sehr vielversprechend, leider findet er die bei mir nicht.

/usr/bin/ld: cannot find -lopenmp
collect2: ld returned 1 exit status
Das lag an meiner Erwartungshaltung beim Lesen ;)
Ich habe "libopenmp" erwartet zu lesen, daweil heißt die Lib "libgomp".
Du musst natürlich gegen die Lib linken, welche deine Symbole entählt.
Also LIBS += -lgomp, wenn libgomp.so diejenige ist welche.

Verfasst: 21. Mai 2010 13:12
von Halcom
Danke die war es natürlich.

Ist doch im Prinzip das selbe als wenn ich LIBS += /usr/bin/libgomp.so.1 schreibe?

Leider schreibt er mir nun immer noch hin das er nur einen Thread hat.

Number of OpenMP Threads: 1

Verfasst: 21. Mai 2010 14:02
von kater
int omp_get_max_threads()
int omp_get_num_procs()

Doku lesen ;)