gpt4 book ai didi

c++ - 在发布中使用 dladdr

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:19:52 31 4
gpt4 key购买 nike

我正在为我的应用程序编写分析工具,并且我正在使用 dladdr 将函数指针转换为名称。只要我处于调试状态,一切都可以正常工作,但是一旦我在发行版中编译(使用 XCode 5.1),所有名称转换都会失败并返回 NULL ex:

#include <dlfcn.h>
int main( int argc, char **argv )
{
Dl_info info;

if( dladdr( main, &info ) != 0 )
{ fprintf( stderr, "%s\n", info.dli_sname ); }

我尝试了传递给 C/C++ 标志的多个编译器标志:-export-dynamic -fPIC 以及 -Wl,--export-dynamic 没有任何作用......是否有一种方法仍然可以通过优化和编译保留 dladdr 的函数地址 -> 名称翻译功能?

最佳答案

clang 和 gcc 支持 -rdynamic 选项作为 linker 选项。这应该使 dladdr 能够在 Release模式下按预期运行。 -rdynamic 定义为:

-rdynamic Pass the flag -export-dynamic to the ELF linker, on targets that support it. This instructs the linker to add all symbols, not only used ones, to the dynamic symbol table. This option is needed for some uses of dlopen or to allow obtaining backtraces from within a program.

可以找到有关 gcc 链接器选项的更多信息 here

关于c++ - 在发布中使用 dladdr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25925660/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com