- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
总而言之,我想要的是避免在多个 .dll 中出现重复的 .lib 文件,因为生成的 .dll 将在一个 .exe 文件中一起使用,这会使 .lib 文件中的全局状态重复。
具体问题:
我有一个包含 3 个库和一个 .exe 的项目:
依赖如下:
我有一个 .exe。同时依赖于 libDependentA.dll 和 libDependentB.dll
这会将我的 .lib 复制到 .exe 中,这就是导致问题的原因。
解决方案?
从 libIndependent.lib
中创建一个 .dll。我怎样才能做到这一点?我无法通过 add_libary(newdllfromlib SHARED)
在 cmake 中从 .lib 文件创建 dll。它没有源文件依赖项,我尝试将 target_link_libraries
放入newdllfromlib
。有没有不使用空源文件或其他技巧的简单方法?
libDependentB.dll
仅依赖于 libDependentA.dll
并从 libDependentB.dll
中删除 libIndependent.lib
.我怎样才能在 cmake 中做到这一点?这里的问题似乎是 cmake 可传递地传播到所有其他地方 libIndependent.lib
,包括 .exe,如果它出现在 target_link_libraries(libDependentA...
中。如果我添加了 LINK_PRIVATE
,然后,我无法在 cmake 中设置我想要的配置,因为我必须再次将 libIndependent.lib
链接到 libDependentB.dll
. 无论如何要做?最佳答案
从链接的静态库中复制 .dll 中的符号是静态库应该做的。如静态库libIndependent
是第 3 方代码,然后是 libIndependent
的开发人员他们选择静态库而不是动态库可能有一些原因。
如果您使用来自 libIndependent
的符号在两个libDependentA
和 libDependentB
而且您没有 libIndependent
的源代码,简短的回答是你不能直接这样做。静态库通常使用与共享库不同的标志/定义集构建(最明显的是导出符号 dllexport
/dllimport
如您所述)。您可以导出一些 libIndependent
来自 libDependentA
的符号通过 def file .但通常只有在 dll 中使用的符号才会出现在库中 (libDependentA
),您可能会遇到各种其他问题。
但是您可以创建共享库包装器 libIndependentWrapper.dll
,您可以在其中为 libIndependent
中的每个函数创建一个包装函数你需要。包装函数将具有带有 dllexport
的新 header /dllimport
.
关于c++ - Cmake、.lib、dll 并避免在二进制文件中复制多个 .lib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22853497/
我是一名优秀的程序员,十分优秀!