我正在重构一套旧的实用程序,并创建一个新的服务器,该服务器将使用所有实用程序中的公共代码来统一其功能并允许远程客户端进行外部访问。 对于每个实用程序,我将需要用于服务器的代码提取出来重构为共享库,以便实用程序和服务器现在都将链接到共享库。 由于这些实用程序的前任实现者所做的方式,每当他们需要创建新的实用程序时,他们几乎只是复制和粘贴了所有东西,因此有大量具有相同签名(即用于 XML 解析器的回调)但内部执行不同任务的函数。
当我运行已经重构为与共享代码链接的独立实用程序时,它们运行得非常完美。当我尝试使用具有相同功能的服务器作为特定实用程序时,服务器使用的是链接的第一个库中的代码,而不是应该从中获取功能的库。
例如,我有设备A、B、C的xml,这些xml由一个通用的xml库解析,但每个设备都有自己的共享库libA、libB、libC,服务器使用这些库。当我调用服务器发送设备C的xml时,它使用libA中的HandleStartElement函数,而不是libC中具有相同名称和签名的函数,尽管共享库仅在内部声明这些函数,并且不共享任何包含用于解析xml的内部回调的标题。
有些人能否向我解释为什么不阅读适当的职能,以及今后如何避免这样做?
我的服务器makefile中,编译主程序需要使用以下标志:
-I../include -L../lib -lA -lB -lC
每个共享库几乎没有使用共享库的标志,并且没有使用-fPIC。