Ошибка dlopen при использовании функции dlopen в файле общей библиотеки - PullRequest
0 голосов
/ 03 января 2019

Я использую CLion с CMake (MinGW) и языком C (C11). Я хочу создать файл общей библиотеки с одной функцией, внутри которой вызывается функция "dlopen ()" (используя заголовок "dlfcn.h"),Теперь я хочу создать исполняемый файл и открыть созданный файл общей библиотеки, но когда я пытаюсь использовать «dlopen ()», чтобы открыть созданный файл библиотеки, эта функция возвращает ошибку (126 (не могу найти)), но если я удаляюфункция "dlopen ()" в функции созданной библиотеки, библиотека загружается в исполняемый файл без каких-либо проблем.на самом деле проблема заключается в вызове функции "dlopen ()" в общей библиотеке ... она показывает, что для библиотеки требуется функция "dlopen ()" Основная библиотека !!!!

mysharedlib.c

#include <dlfcn.h>

void hello(void)
{
    void * handle = dlopen("xyz.dll", RTLD_LAZY);
}

в этом файле параметры функции dlopen не важны ... просто когда я использую функцию "dlopen", я получаю сообщение об ошибке при открытии библиотеки при сборке

исполняемый файл main.c

#include <stdio.h>
#include <dlfcn.h>

int main()
{
    void * handle = dlopen("mysharedlib.dll", RTLD_LAZY);
    if(handle == NULL)
    {
        printf("failed to open the shared library");
        return 1;
    }
    return 0;
}

это 2 разных проекта ... первый - моя общая библиотека, в которой я пытался открыть другую библиотеку, а второй - исполняемый файлкоторый пытается открыть проект 1 (общая библиотека)

здесь, в моем исполняемом файле, я получил сообщение об ошибке «Не удалось открыть общую библиотеку»!

, но если я удалю эту частьиз общей библиотеки (проект 1)

void * handle = dlopen("xyz.dll", RTLD_LAZY);

, а затем создайте проект 1 как общую библиотеку, я не получаю ошибок, и библиотека без проблем откроется в исполняемом файле

в чем проблема ?почему, когда я использую функцию «dlopen» в общей библиотеке, а затем пытаюсь открыть эту встроенную библиотеку в исполняемом файле, я получаю сообщение об ошибке, но когда я удаляю функцию «dlopen» в общей библиотеке, а затем пытаюсь открыть эту библиотекув исполняемом файле проблем нет?

...