return dlsym 的地址和函数指针的地址分配
return address of dlsym and Address of Function Pointer assigned
void* l = dlsym(lib,"_ZN11Environment9LibLogger14log_processingEiNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEjS6_z");
*(void **)&log_fcn = l;
std::cout<<"Address"<<<<l<<"LOG_FCN "<<log_fcn<<std::endl;
我正在尝试打印 l
和 log_fcn
的地址,但两者并不相同。为什么会这样,我如何才能将 dlsym
的地址分配给函数指针?
输出示例:
l= 0x7efe10eabaa0 LOG_FCN 1
void (*log_fcn)(int level, std::string frmt, unsigned int line_no, std::string file_name, ...);函数减速
void*
有一个 operator <<
,但函数指针没有。
函数指针被隐式转换为 bool
,而不是 void*
,并且 bool
默认打印为 0
或 1
。
您的 1
输出表明 log_fcn
不是空指针。
打印时转换:
std::cout << "Address" << l << "LOG_FCN "<< reinterpret_cast<void*>(log_fcn) << std::endl;
我建议您也以常规形式进行赋值,即 right-hand 侧:
log_fcn = reinterpret_cast<decltype(log_fcn)>(l);
void* l = dlsym(lib,"_ZN11Environment9LibLogger14log_processingEiNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEjS6_z");
*(void **)&log_fcn = l;
std::cout<<"Address"<<<<l<<"LOG_FCN "<<log_fcn<<std::endl;
我正在尝试打印 l
和 log_fcn
的地址,但两者并不相同。为什么会这样,我如何才能将 dlsym
的地址分配给函数指针?
输出示例:
l= 0x7efe10eabaa0 LOG_FCN 1
void (*log_fcn)(int level, std::string frmt, unsigned int line_no, std::string file_name, ...);函数减速
void*
有一个 operator <<
,但函数指针没有。
函数指针被隐式转换为 bool
,而不是 void*
,并且 bool
默认打印为 0
或 1
。
您的 1
输出表明 log_fcn
不是空指针。
打印时转换:
std::cout << "Address" << l << "LOG_FCN "<< reinterpret_cast<void*>(log_fcn) << std::endl;
我建议您也以常规形式进行赋值,即 right-hand 侧:
log_fcn = reinterpret_cast<decltype(log_fcn)>(l);