linux上动态链接期间符号的替代实现

Posted

技术标签:

【中文标题】linux上动态链接期间符号的替代实现【英文标题】:Alternative implementation of a symbol during dynamic linking on linux 【发布时间】:2014-07-09 15:26:37 【问题描述】:

我有一个使用共享库的动态链接 linux 可执行文件。其中一个库具有该库中其他函数使用的函数 - 该函数的目标代码包含在该库中。我想提供该函数的替代实现,以便那些其他函数将调用我的代码,而不是调用库中的原始代码。

有什么办法吗?

【问题讨论】:

必须重新编译库;除非函数允许函子或多态性.. 如果你可以使用 LD_PRELOAD 你可以提供一个替代的实现。您可以在this post 或man page for ld.so 上阅读更多相关信息。 谢谢,这正是我想要的。 【参考方案1】:

如果不对库进行新的更改,就无法做到这一点。

如果这些函数是全局或静态函数,你肯定要重新编译。

如果这些函数是虚拟成员函数,并且如果您的应用程序/库具有挂钩/可扩展性或工厂类型的东西,可以将派生对象新到应用程序,您可以更改它。

否则你必须重新编译库代码。

【讨论】:

以上是关于linux上动态链接期间符号的替代实现的主要内容,如果未能解决你的问题,请参考以下文章

linux 静态链接和动态链接

怎么查看一个动态库 需要链接 文件

Linux C++ libdl.so dlfcn.h使用方法(dlopen()dlsym()dlclose()dlerror())(用于动态链接库操作)(懒加载立即加载)共享库符号动态库

linux动态库的种种要点

Linux动态链接惰性链接

linux上静态库和动态库的编译和使用(附外部符号错误浅谈)