c++ - 如何在 VS2015 中将外部库依赖项链接到一个静态库文件中

标签 c++ visual-studio visual-studio-2015 static-libraries static-linking

情况是这样的。

我有一个库项目 A,它使用和操作其他第三方库,我们称它们为 T1 和 T2。

然而,当我在我的任何其他项目中使用这个库 A 时,它会提示它无法打开第三方库 T1 和 T2,即使它没有直接使用它们。当然,它通过库 A 间接使用它们,因为 A 做了适当的工作来链接和包含该库等。

我是否真的需要将这些其他库添加到使用库 A 的项目中,或者是否有一种方法可以让库 A 的用户连接起来,这样库 A 的用户只需要担心那个库而不用担心它是由什么构成的.

编辑:

Found some related questions but the answers do not quite solve the issue;

linking-static-libraries-to-other-static-libraries

how-to-combine-several-c-c-libraries-into-one

编辑2:

感谢您到目前为止的回答。让我澄清一下我的情况。

我在 VS2015 中有一个 .lib 项目,我们称之为 MathLib。这个 MathLib 在内部使用了一个 boost 库来进行计算,我们称这个库为 BoostMath。属性文件都设置为包含和使用此 BoostMath,这在库项目本身中完美运行。

我现在正在制作另一个使用 MathLib 进行计算的项目 User。它做了适当的包含和所有使用这个库。然而,它提示说它不知道 BoostMath 库,因此无法使用 MathLib 库。

有人可能会争辩说,为什么不像 MathLib 库那样将 BoostMath 包含到项目 User 中,但这没有捕获要点。我想创建一个我自己的库,它可能会或可能不会在内部使用其他库,但这对我的库的最终用户来说应该没有任何关系。

我可能必须在 VS Librarian 中设置一些东西才能实现这一点,将库连接在一起或一些。但我似乎无法弄清楚。有什么想法吗?

编辑 3: 我什至在属性文件中发现了与此 answer 中提到的完全相同的命令行.

/OUT:"MathLib.lib" "BoostMath.lib" /NOLOGO /LIBPATH:"path\lib" 

但是由于某些原因它不起作用。如果我在有和没有 Librian 属性设置的情况下运行它,.lib 二进制文件都保持不变。

Appearantly this functionality is broken since VS2010? According to this answer. Usefull other question. Edit4:

我基本上想这样做,但它在 VS2015 中似乎不起作用

+---------------+
| End user exe  |
+---------------+
       |
       | some api call
       |
+---------------+
| My MathLib    |
+---------------+
       |
       |
       +---------------+------------+----
       |               |            |
 +-----+------+  +-----+-----+
 | BoostMath  |  | OtherMath |
 +------------+  +-----------+

最佳答案

我不确定您如何将库链接到项目...但它不应该提示编译器无法打开库 T1 和 T2,除非您将它们包含在编译器设置中。

一般没有库会报找不到函数示例T1_xxxx(该函数定义在T1中)。我建议你检查项目的编译器设置

关于c++ - 如何在 VS2015 中将外部库依赖项链接到一个静态库文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37074915/

相关文章:

c++ - vtkArrayCalculator - 访问输出时出现段错误

c++ - 使用 OpenCV 在 C++ 中自行构建一些函数

xml - 当引用的架构文件位于不同的项目/程序集中时,如何在 VS 中指定 XSD schemaLocation 属性?

c# - 重复点击按钮

c# - Visual Studio 2015 - 片段后的 C# 换行行为

c++ - 迭代器作为映射值出错

c++ - 您可以将一个宏作为参数提供给另一个宏,而不扩展初始宏吗?

visual-studio - Visual Studio : Code Cleanup ignoring "Add ' this' or 'Me' qualification' fixer

.net - 将 DLL 移动到 Azure 云服务部署包

angular - Visual Studio 2015 RC3 TypeScript Intellisense 不再工作