При попытке загрузить модуль (общий объект) через 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";
Там нет никаких проблем. Как насчет значения по умолчанию, т. Е. Если я опускаю ./?
Читать * тщательно * Ваша документация [dlopen (3)] (http://man7.org/linux/man-pages/man3/dlopen. 3.html). Я считаю, что ваша программа должна добавить '. /', Если путь к файлу не содержит никакого '/' –