当前位置: 首页 > 面试题库 >

我可以通过链接此dl从动态库中加载函数,但是如果不链接此dl,就无法在代码中使用“ dlsym”加载它

后源
2023-03-14
问题内容

我在fedora 116上使用gcc / g ++,我的想法是:

c program -> load c++ dynamic library A -> load c++ dynamic library B

c ++动态库B是第三方提供的,我无法对其进行修改

当用链接c 动态库B组合c 动态库A时,A可以在B中找到符号。但是当我使用’dlsym’在A代码中加载B函数(不链接)时,A告诉我

/path/to/B.so: undefined symbol: some_func

============================

使用nm -DC

0000000000014a80 T BinarySearch(int, int*, int)
0000000000007210 T CheckLicense()
0000000000009370 T GetEnd(stCha*, int&, int)
000000000000a970 T IC_Exit()
000000000000a740 T IC_Init(char const*)

错误报告:

/path/to/some.so undefined symbol: IC_Init

库A中的代码:

IC_API bool (* IC_Init)(const char *);
IC_Init = (IC_API bool (*)(const char *)) dlsym(dl_ic, "IC_Init");
if(IC_Init) {
    printf("function loaded");
}

在库A中,它可以使用dlopen加载库B:

void *dl_ic = dlopen(ic_lib_path, RTLD_LAZY);

问题答案:

您考虑过改名吗?C ++标识符通常被“缠结”以在其名称空间和参数上合并信息(这在历史上可帮助链接程序区分重载函数)。您可能希望使该函数extern "C"防止变形,或找到要与之配合使用的变形名称dlsym(例如,nm在对象或gcc -S -o /dev/tty ... | grep some_func源上使用Linx时)。



 类似资料:
  • 在Postgresql版本10中创建扩展时出错 无法加载库"C:/Program Files/PostgreSQL/10/lib/plpython3.dll":找不到指定的模块 注意:在窗口10上使用Postgresql 10

  • 本文向大家介绍C语言从代码中加载动态链接库过程解析,包括了C语言从代码中加载动态链接库过程解析的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了C语言从代码中加载动态链接库过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 函数:void *dlopen(const char *filename, int flag); 功能:打开动

  • 问题内容: 我有3个数据库。1链接到2,2链接到3。我想从1查询3中的表。我尝试了third_db_tab @ 3 @ 2,但它不起作用。想知道这是否可能,如果可能,语法是什么。 问题答案: 我认为您可以通过创建同义词来做到这一点。在数据库2中创建一个同义词: 然后在数据库1中创建第二个同义词: 这未经测试(我现在没有运行三个数据库),但是我认为Oracle足够聪明,可以解开同义词。

  • 问题内容: 如标题所述,我想基于仅在运行时可用的信息来动态加载(或不)动态加载Go软件包。 目的是允许用户通过添加新的本机脚本命令的自定义程序包扩展程序。当前,每次我添加新命令或禁止使用某些命令时,都需要编辑程序并重新编译,而如果我可以制作某种dll之类的文件,则可以创建一个“导入”脚本命令来搜索和加载命名命令库。 出于好奇,该程序是基于定制命令的脚本库,我将其用于各种用途。 我提前进行了一些搜索

  • 问题内容: 无论如何,有没有要监听元素的onload事件? F.ex: 这适用于元素,但不适用于。还有另一种方法吗?我只需要知道外部样式表中的样式何时应用于DOM。 更新: 将隐藏物添加到头部,然后在iframe中监听事件是否是一个主意?它应在加载CSS时触发,但可能无法保证它已在顶部窗口中加载… 问题答案: 这是一种hack,但是如果您可以编辑CSS,则可以添加一种特殊的样式(没有可见的效果),

  • 问题内容: 我不必太麻烦mailto链接。但是,如果可能,我现在需要在mailto正文中添加一个链接。 有没有一种方法可以添加链接或将打开的电子邮件更改为HTML电子邮件还是文本电子邮件? 就像是: 问题答案: RFC 2368的)第2节说该字段应采用格式,因此您不能使用HTML。 但是,即使您使用纯文本,某些现代邮件客户端也可能仍然将URL呈现为可点击的链接。