函数未执行

问题描述 投票:0回答:1

我想了解以下场景到底发生了什么。 我有一个共享库(A),它通过动态加载加载另一个共享库(B)。 库 A 也公开了一些方法(F1)。

主程序加载库A,然后库A稍后加载库B。 现在,当库 B 尝试使用库 A 中的函数 F1 时,它无法加载其符号,并且编译会默默地停止执行,而不会给出任何警告/错误或核心。即使我可以看到从库 A 导出的这些符号(使用 nm 命令)。 我不太确定到底发生了什么。我在 Linux.64 上观察到了这一点。 Windows 上的情况相同。

c++ linux linker
1个回答
0
投票

我的心灵调试能力告诉我,因为你将其标记为 C++,所以你正在编译 C++ 代码。我还猜测您使用稍微不同的选项来编译库 A 和 B,导致它们的名称修饰和/或 ABI 不兼容,因此无法找到方法。

您是否考虑过让链接器将所有共享对象应用到您的应用程序而不是使用

dlopen
?然后您会立即知道存在问题,因为链接器无法匹配符号。

或者 Linux 可能只是不喜欢你的循环库引用:你能重构你的库来消除循环依赖吗?

© www.soinside.com 2019 - 2024. All rights reserved.