我想通过dlopen和dlsym使用libary函数,libary函数有一个默认参数。当我通过动态加载libary使用此函数时,它可以正常工作,因此我如何实现。
extern "C" int checklib(char *arg1, char *arg2 = NULL)
{
if(arg2 != NULL)
{
printf("arg2 is not null");
}
printf("arg1 = %s\n", arg1);
}
int main()
{
void *libHandle = NULL;
char *error;
int ret;
libHandle = dlopen("libtest.so", RTLD_LAZY);
if (!libHandle)
{
fprintf(stderr, "%s\n", dlerror());
return(-8);
}
typedef int (*fun_ptr_to_test)(char *);
fun_ptr_to_test test;
test = (fun_ptr_to_test) dlsym(libHandle, "checklib");
if ((error = dlerror()) != NULL)
{
fprintf(stderr, "%s\n", error);
if (libHandle)
dlclose(libHandle);
return(-8);
}
ret = test("dadfsj");
if (libHandle)
dlclose(libHandle);
return ret;
}
我在arg2中得到了一些垃圾值。那么我该如何实现呢?