0

我正在处理的程序静态链接到 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 但这太乏味了......

谢谢,

蒂姆

4

1 回答 1

0

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

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

您知道正确的做法:更新您的代码。如果它太乏味,那么你的代码一定不值得付出努力。如果您必须使用新功能编写代码,那么值得更新。您想要做的最后一件事是创建一种情况,您现在被绑定到同一个库的两个不同且不兼容的版本。如果你以后必须维护它,你会踢自己。如果其他人必须维护它,他们会追捕你并击败你。以正确的方式去做。

于 2009-06-10T18:22:41.950 回答