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