假设我将我的应用程序与两个静态库链接。在这两个库中,我们可以找到名称相同但功能不同的函数,这会导致符号冲突。我通常的方法 - 编辑库的源代码并为每个函数的名称添加唯一的前缀。但我不想再手动执行此操作了。是否有某种工具或智能方法可以为选定源文件中的所有函数添加自定义前缀?我使用 Visual Studio 2010 在 Linux 和 Windows 上工作,因此我可以在这两个平台中的任何一个上使用此类工具。
一般来说,改变库中的函数签名是一个非常糟糕的主意。特别是如果您正在使用预先存在的代码库。如果其他人正在使用该函数,您将破坏他们的代码。
即使这只是您自己的项目,您可能也不应该养成这种习惯。
为什么不完全指定冲突的函数呢?而不是仅仅让 using Library1; 使用库2;处理它,您可以尝试在不明确的情况下显式指定 Library1.Function1() 。
编辑:啊,我以为我看到了 C++,如果没有命名空间,这个答案是完全无效的。 这可能会有所帮助
Edit2: objcopy 似乎只通过添加临时副本前缀来解决破坏其他人签名的问题。马蒂亚斯发布的链接有完整的解释,我将在此处重新链接以提高可见性