2016-07-12 10 views
0

Ich möchte mit tbb :: task_scheduler_observer in eine tbb :: task_arena einhaken. Laut der Dokumentation sollte dies wie shown here funktionieren. Aber wenn ich versuche, den folgenden CodeFehler beim Verlinken mit tbb :: task_arena und tbb :: task_scheduler_observer

#define TBB_PREVIEW_TASK_ARENA 1 
#include "tbb/task_scheduler_observer.h" 
#include "tbb/task.h" 
#include "tbb/task_arena.h" 
class MyObserver : public tbb::task_scheduler_observer 
{ 
    public: 
    MyObserver(tbb::task_arena &a) : tbb::task_scheduler_observer(a) 
    { 
     observe(true); // activate the observer 
    } 
    /*override*/ void on_scheduler_entry(bool worker) 
    { 
     // Do something here 
    } 
    /*override*/ void on_scheduler_exit(bool worker) { } 
}; 

und

#define TBB_PREVIEW_TASK_ARENA 1 
#include "tbb/task_arena.h" 

int main() 
{ 
    tbb::task_arena a; 
    MyObserver my(a); 
} 

ich eine

undefined refference to `tbb::task_arena::internal_terminate()` 

Fehler zu kompilieren. Andere tbb-Funktionen (und Klassen) funktionieren gut, wenn sie mit dem -ltbb-Flag kompiliert werden.

Ich benutze Ubuntu 14.04 und g ++ 4.8.4 mit -std = C++ 11 aktiviert.

+0

Wich Linie geben Sie den Fehler? Ich meine: Sie haben denselben Fehler, wenn Sie die Zeile "MyObserver my (a);" kommentieren? – max66

+0

Ja. Es kommt immer noch vor. – sQu4rks

+0

Dies passiert, wenn Sie falsche Version von Libtbb verknüpfen. Verbindest du es überhaupt? Bitte zeigen Sie Ihren Link-Befehl – Anton

Antwort

0

Meine eigene Frage zu beantworten, hier ist, was das Problem gelöst. Anscheinend ist der task_scheduler_observer, der eine tbb :: task_arena benötigt, eine Community Preview-Funktion. Sie müssen es aktivieren, bevor Sie die Kopfzeile

#define TBB_PREVIEW_LOCAL_OBSERVER 1 
#include "tbb/task_scheduler_observer.h" 

wird den Trick tun. Jetzt ist es in Ordnung. Außerdem baue ich die Bibliothek aus der Quelle, anstatt die in den Ubuntu-Repositorys zu verwenden. Es gibt eine CMake Build zur Verfügung here