Static libraries
Static libraries
我对静态库有一个问题。我需要在一个没有名称冲突的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(即不同的命名空间甚至不同的名称)。
相关文章:
- 为什么即使使用-cudart-static进行编译,库用户仍然需要链接到cuda运行时
- C++ MFC Libraries in Travis CI
- 如何处理 c++ 中类实现中的"invalid use of non-static data member"?
- 收到错误"invalid use of non-static data member 'stu::n' "
- LNK1104:无法打开libpjproject-i386-Win32-vc14-Debug-Static.lib
- 我应该在 C++ 中何时/为什么使用 STATIC?
- 在VS2019项目中集成ImageMagick:x64-windows-static library
- 如何处理Boost Spirit X3导致Visual Studio 2019 "static initialization order fiasco"?
- "static char __ = []() -> char"的含义
- 当初始值设定项是基类名时'initializer does not name a non-static data member or base class'错误
- 无法在 DLL 中链接 SDL2-static.lib
- 如何摆脱C++中未解析的外部符号"private: static char"错误?
- C++线程"Call to non-static member function without an object argument"
- 出现这种错误的原因是什么"invalid use of non-static data member "
- static是如何使用ClassA::m_variable处理所有类对象的
- Ardunio Uart class & Libraries
- LNK2001:未解析的外部符号public:static类std::vector
- 使用-static libstdc++时std::线程弱,因此在运行时会导致崩溃
- Static libraries
- Static libraries