如何将外部库依赖项链接到VS2015

时间:2016-05-06 14:26:05

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

就是这种情况。

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

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

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

修改

  

发现了一些相关的问题,但答案并没有完全解决   问题;

     

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

     

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

EDIT2:

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

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

我现在正在制作另一个使用 MathLib 进行计算的项目用户。它使用适当的包含和所有使用此库。但是它抱怨它不知道 BoostMath 库,因此无法使用 MathLib 库。

有人可能会争辩为什么不仅仅将 BoostMath 包含在项目用户中的方式与 MathLib 库执行此操作的方式相同,但这是缺少的。我想创建一个我自己的库,可能会也可能不会在内部使用其他库,但这不应该对我的库的最终用户有任何影响。

我可能不得不在VS Librarian中设置一些东西以实现这一点,将libs连接在一起或一些。但我似乎无法弄明白。有什么想法吗?

EDIT3: 我甚至在属性文件中找到了与answer中提到的完全相同的命令行。

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

然而由于某种原因它不起作用。如果我使用和不使用Librian属性设置运行它,.lib二进制文件保持不变。

  

从VS2010开始,这个功能显然已被打破?根据{{​​3}}回答。   有用的其他this。   的 Edit4:

我基本上想要这样做,但它似乎不适用于VS2015

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

2 个答案:

答案 0 :(得分:1)

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

通常情况下,如果您没有库,则报告无法找到功能示例T1_xxxx(此功能在T1中定义)。我建议你检查一下项目的编译器设置

答案 1 :(得分:0)

基本上静态库不进行链接,特别是静态库无法指定自己的依赖项。您可以通过将#pragma comment(lib)分布在单个obj文件(即单个源文件)周围而不是在库级别来部分地解决这个问题 - 而且似乎您无论如何也不打算修改lib源。 / p>

您最好的选择似乎是将lib及其依赖项组合到一个lib中,如图所示。 here

  

lib.exe /OUT:compositelib.lib lib1.lib lib2.lib

请注意,每当任何依赖项发生更改时,您都必须重新打包。作为用户,我本人更愿意在我的消费者解决方案中包含所有引用的库。