1 //===-- DynamicLibrary.cpp - Runtime link/load libraries --------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file was developed by Reid Spencer and is distributed under the
6 // University of Illinois Open Source License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This header file implements the operating system DynamicLibrary concept.
12 //===----------------------------------------------------------------------===//
14 #include "llvm/System/DynamicLibrary.h"
18 //===----------------------------------------------------------------------===//
19 //=== WARNING: Implementation here must contain only TRULY operating system
20 //=== independent code.
21 //===----------------------------------------------------------------------===//
27 DynamicLibrary::DynamicLibrary() : handle(0) {
29 throw std::string(lt_dlerror());
31 handle = lt_dlopen(0);
34 throw std::string("Can't open program as dynamic library");
37 DynamicLibrary::DynamicLibrary(const char*filename) : handle(0) {
39 throw std::string(lt_dlerror());
41 handle = lt_dlopen(filename);
44 handle = lt_dlopenext(filename);
47 throw std::string("Can't open dynamic library:") + filename;
50 DynamicLibrary::~DynamicLibrary() {
52 lt_dlclose((lt_dlhandle)handle);
57 void *DynamicLibrary::GetAddressOfSymbol(const char *symbolName) {
58 assert(handle != 0 && "Invalid DynamicLibrary handle");
59 return lt_dlsym((lt_dlhandle) handle,symbolName);
63 DynamicLibrary::DynamicLibrary(const char*filename) : handle(0) {
64 assert(!"Have ltdl.h but not libltdl.a!");
67 DynamicLibrary::~DynamicLibrary() {
68 assert(!"Have ltdl.h but not libltdl.a!");
71 void *DynamicLibrary::GetAddressOfSymbol(const char *symbolName) {
72 assert(!"Have ltdl.h but not libltdl.a!");