Update.
[universe.git] / task.cc
1
2 // Written and (C) by Francois Fleuret
3 // Contact <francois.fleuret@idiap.ch> for comments & bug reports
4
5 #include <iostream>
6 #include <dlfcn.h>
7
8 using namespace std;
9
10 #include "task.h"
11 #include "universe.h"
12 #include "manipulator.h"
13
14 Task::~Task() { }
15
16 typedef Task *TaskConstructor();
17
18 Task *load_task(const char *filename) {
19   void *handle = dlopen(filename, RTLD_NOW | RTLD_GLOBAL);
20
21   if(handle == 0) {
22     cerr << "Error in dynamic loading: " << dlerror() << "." << endl;
23     exit(1);
24   }
25
26   TaskConstructor *creator = (TaskConstructor *) dlsym(handle, "new_task");
27
28   if(creator == 0) {
29     dlclose(handle);
30     cerr << "Error looking for function new_task() in " << filename << "." << endl;
31     exit(1);
32   }
33
34   return (*creator)();
35 }