首页 > 解决方案 > 当 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 中得到了一些垃圾值。那么我该如何实现呢。

标签: c++linux

解决方案


推荐阅读