Static libraries

Static libraries

本文关键字:libraries Static      更新时间:2023-10-16

我对静态库有一个问题。我需要在一个没有名称冲突的DLL中使用相同SDK的2个不同版本。我认为解决方案是为每个版本的SDK制作2个静态库,然后将这些库导入DLL。但这个解决方案工作奇怪,我不知道为什么....

简化后的情况如下:

LIB1 -有函数Add1使用SDK 1.0的东西

LIB2 -有一个函数Add2使用SDK 2.0的东西

DLL-导入LIB1和LIB2,并有函数Add(浮动版本)调用Add1或Add2 -取决于参数

中的版本号

编译过程是OK的,但DLL只能与一个版本的SDK工作:(

当我调试它时,我看到程序从DLL中调用了2.0版本的Add函数。然后Add就会调用Add2 -所以这还是对的。但是在Add2函数中,它使用的是SDK 1.0中定义的东西,而不是SDK 2.0 !LIB2实际上是用SDK 2.0创建的。(包括dirs和lib dirs设置为SDK 2.0)

为什么它使用SDK 1.0 ??(

是因为链接器将所有东西连接在一起,当我创建DLL和SDK 1.0的符号覆盖SDK 2.0的符号?(没有不同的命名空间)。

你知道问题在哪里吗?有什么解决办法吗?

非常感谢!

您观察到的行为可能是由链接器选项中列出库的顺序引起的。试着以相反的顺序列出它们,你可能会观察到"相反"的行为。

我认为你不能像这样混合和匹配具有相同符号的库。您最好的选择是将至少一个库(或两个库)包装在单独的DLL中,然后将不同的符号暴露给您的"客户端"DLL(即不同的命名空间甚至不同的名称)。