C “如何编写函数指针”;指向;扩展到实际函数的宏?
我在库C “如何编写函数指针”;指向;扩展到实际函数的宏?,c,function-pointers,dynamic-linking,dlopen,C,Function Pointers,Dynamic Linking,Dlopen,我在库lib中有一个函数,所以我正在使用dlopen()动态链接到我的应用程序 lib.h myapp.c void (*DBG_PRINT_ptr)( unsigned char logLevel, const char *programName, const char *format, ... ); void *handle = NULL; bool ret
lib中有一个函数,所以我正在使用dlopen()动态链接到我的应用程序
lib.h
myapp.c
void (*DBG_PRINT_ptr)( unsigned char logLevel,
const char *programName,
const char *format,
... );
void *handle = NULL;
bool ret = RESULT_SUCCESS;
/* Open Shared Lib into the same Process */
/* LDRA_INSPECTED 496 S */
handle = dlopen(lib.so, RTLD_NOW);
if (NULL == handle)
{
/* fail to load the library */
LLOG_error(" dlopen Error to open handle: %s\n", dlerror());
ret = RESULT_FAILURE;
}
if(RESULT_SUCCESS == ret)
{
DBG_PRINT_ptr = dlsym(handle, "DebugPrint");
if( DBG_PRINT_ptr == NULL)
{
LLOG_error("Failed in DBG_PRINT dlsym(): Err:%s", dlerror());
dlclose(handle);
ret = RESULT_FAILURE;
}
}
(void)DBG_PRINT_ptr ("loglevel1","dd","printval");
但我在运行时出错了
在DBG_PRINT dlsym()中失败:错误:找不到符号
对于以下要求,定义函数指针的正确方法是什么。无法使用函数指针指向宏。函数指针只能指向函数
但是,您可以有一个指向宏调用的函数的指针。像这样:
auto fptr = &DebugPrint;
这意味着动态库中没有该名称的符号
一个典型的错误是尝试加载具有C++语言链接的函数。此函数的符号将被损坏,并且与函数名称不匹配
函数可以声明为具有与语言链接声明的C链接:
extern "C"
尝试将您的DebugPrint
函数声明为extern“C”
我看不出宏与您的问题有什么关系,因为您没有在任何地方使用它。是的,您的问题的标题非常误导人。这是否回答了您的问题?请注意C++允许函数和运算符重载。某些链接器使用名称混乱将此重载函数映射到C样式的函数名。标题错误代码请勿尝试在dll中访问宏。因为我使用的是C语言,所以无法对函数使用auto关键字pointer@maheshhegde是的,其他语言是不同的。我的答案是关于C++。@ MasHeHeGeD:如果你不想要C++答案,不要使用标签。我帮你取下来了。
Symbol not found
extern "C"