c++ - 当 dlopen 和 dlsym 使用库函数时,在 Linux 库中使用默认参数
问题描述
我想使用 dlopen 和 dlsym 使用库函数,库函数有一个默认参数。当我通过动态加载库来使用此功能时,它工作正常,那么我该如何实现呢?
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 中得到了一些垃圾值。那么我该如何实现呢。
解决方案
推荐阅读
- flutter - 以编程方式更改 Flutter 上的鼠标光标
- c - 插入c中的链表时值错误
- c# - 如何在 C# aspnet 中检查下拉列表是否存在
- c++ - ReadFile 仅在换行后返回
- node.js - 停靠多个 chrome devtool 窗口
- nginx-location - 在 NGINX 'location ~ .*' 中不匹配任何字符串
- c# - 关闭此对象实例以在我的 2D 游戏引擎中加载新屏幕的最有效方法是什么?
- sql - 如何在 Oracle SQL*Plus 中格式化输出?
- git - Git 删除添加的带有大文件的提交
- javascript - 编写一个处理注册并将用户信息写入 Firestore 的函数?