在共享库文件中使用dlopen函数时,C dlopen失败

时间:2019-01-03 20:24:18

标签: c shared-libraries dlopen

我正在将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”函数,然后尝试打开该库时在可执行文件中,没有任何问题吗?

0 个答案:

没有答案