在Linux的代码中混合使用不同版本的库

时间:2009-06-10 17:55:28

标签: shared mixed-mode

我正在处理的程序静态链接到3rdPartyLibrary.lib。

我们希望利用同一3rdPartyLibrary的更新版本,例如3rdPartyLibraryNewVersion.lib。

因此决定将3rdPartyLibraryNewVersion.so包含为动态链接库,通过名为wrapper.so的包装器动态库包含。我们希望同时使用新版本和旧版本的3rdPartyLibrary,但是在程序的不同方面。

我们的解决方案是静态链接旧的3rdPartyLibrary并同时动态链接到包装器库到3rdPartyLibraryNewVersion。

程序---静态链接---> 3rdPartyLibrary.lib。         ---动态链接 - > wrapper.so ---动态链接---> 3rdPartyLibraryNewVersion.so。

这可能吗?

我们遇到的问题是,当wrapper.so使用测试可执行文件时,当从静态链接到3rdPartyLibrary.lib的程序调用包装器时,它在3rdPartyLibraryNewVersion.so中失​​败。

我做错了吗?

我知道正确的方法是将我们的代码更新为3rdPartyLibrary.lib,但这太繁琐......

谢谢,

1 个答案:

答案 0 :(得分:0)

你忽略了 如何使用你的包装器方案失败...

但是,如果你这样做,你可能会遇到命名空间冲突,这会导致事情失败或以意想不到的方式表现。

您知道正确的事情:更新您的代码。如果它太繁琐,那么你的代码就不值得付出努力。如果必须使用新功能进行编码,那么值得更新。您想要的 last 事物是创建一种情况,您现在可以绑定到同一个库的两个不同且不兼容的版本。如果你必须在以后维护它,你会踢自己。如果其他人必须维持它,他们会追捕你并打败你。做得对。