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 C++ libdl.so dlfcn.h使用方法(dlopen()dlsym()dlclose()dlerror())(用于动态链接库操作)(懒加载立即加载)共享库符号动态库