2014-09-16 2 views
0

При попытке загрузить модуль (общий объект) через dlopen он не загружается.Путь по умолчанию для использования dlopen для загрузки общего объекта

Скажем, у меня есть testshobj.c, имеющий следующий:

// testobj.c 

int dummy() { 
    return 5; 
} 

Теперь я компилирую и ссылку testobj.c как распределенный объект с именем testshobj.pm tjrough г ++ компилятор:

g++ testshobj.c -G -o testshobj.pm 

сейчас , у меня есть testdlopen.c, как показано ниже:

#include <iostream> 
using namespace std; 
#include <dlfcn.h> 
int main(int argc, char **argv) { 
    const char *modname = "testshobj.pm"; 
    void *handle = dlopen(modname,RTLD_LAZY); 
    if(!handle) { 
    cout << "can't load module: " << modname << ": " << dlerror() << endl; 
     return(1); 
    } 
return 0; 
} 

Но, говорит он, не может загрузить модуль: testshobj.pm: ld.so.1: тест dlopen: fatal: testshobj.pm: open failed: нет такого файла или каталога

My Q: Каков путь по умолчанию в вызове dlopen? Если я использую

const char *modname = "./testshobj.pm"; 

вместо

const char *modname = "testshobj.pm"; 

Там нет никаких проблем. Как насчет значения по умолчанию, т. Е. Если я опускаю ./?

+0

Читать * тщательно * Ваша документация [dlopen (3)] (http://man7.org/linux/man-pages/man3/dlopen. 3.html). Я считаю, что ваша программа должна добавить '. /', Если путь к файлу не содержит никакого '/' –

ответ

0

У меня есть ответ на мой запрос, отправляющий ответ за помощь каждого другого. LD_LIBRARY_PATH должен быть определен как. (Текущий каталог) (если он уже не установлен), как:

export LD_LIBRARY_PATH=. 
+1

Неверный ответ, так как 'LD_LIBRARY_PATH' может быть уже установлен на какой-то важный путь. –

+0

LD_LIBRRAY_PATH не установлен. (текущий каталог) в моем случае, поэтому я получаю не могу загрузить ошибку модуля. Так, ... –

Смежные вопросы