Plugin_unix.cpp
Go to the documentation of this file.
1 /*
2  * This file is part of ALVAR, A Library for Virtual and Augmented Reality.
3  *
4  * Copyright 2007-2012 VTT Technical Research Centre of Finland
5  *
6  * Contact: VTT Augmented Reality Team <alvar.info@vtt.fi>
7  * <http://www.vtt.fi/multimedia/alvar.html>
8  *
9  * ALVAR is free software; you can redistribute it and/or modify it under the
10  * terms of the GNU Lesser General Public License as published by the Free
11  * Software Foundation; either version 2.1 of the License, or (at your option)
12  * any later version.
13  *
14  * This library is distributed in the hope that it will be useful, but WITHOUT
15  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
16  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
17  * for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public License
20  * along with ALVAR; if not, see
21  * <http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html>.
22  */
23 
25 
27 
28 #include <dlfcn.h>
29 #include <sstream>
30 #include <errno.h>
31 
32 namespace alvar {
33 
35 {
36 public:
38  : mHandle(NULL)
39  {
40  }
41 
42  void *mHandle;
43 };
44 
46  : d(new PluginPrivateData())
47 {
48 }
49 
51 {
52  delete d;
53 }
54 
55 void PluginPrivate::load(const std::string filename)
56 {
57  d->mHandle = dlopen(filename.data(), RTLD_LAZY);
58  if (!d->mHandle) {
59  std::stringstream message;
60  message << "could not load " << filename
61  << ", error code " << errno;
62  throw AlvarException(message.str().data());
63  }
64 }
65 
67 {
68  dlclose(d->mHandle);
69 }
70 
71 void *PluginPrivate::resolve(const char *symbol)
72 {
73  void *address = (void *)dlsym(d->mHandle, symbol);
74  if (!address) {
75  std::stringstream message;
76  message << "could not resolve " << symbol;
77  throw AlvarException(message.str().data());
78  }
79  return address;
80 }
81 
82 } // namespace alvar
Main ALVAR namespace.
Definition: Alvar.h:174
void load(const std::string filename)
Definition: Plugin_unix.cpp:55
void * resolve(const char *symbol)
Definition: Plugin_unix.cpp:71
ALVAR exception class.
PluginPrivateData * d
Drawable d[32]
This file implements the ALVAR exception class.


ar_track_alvar
Author(s): Scott Niekum
autogenerated on Thu Jun 6 2019 19:27:24