就是这种情况。
我有一个使用和操作其他第三方库的库项目A,我们称之为T1和T2。
然而,当我在任何其他项目中使用此库时,它抱怨它无法打开第三方库T1和T2,即使它不直接使用它们。当然,它通过库A间接使用它们,因为A做了适当的工作来链接和包含该库等。
我是否真的需要将这些其他库添加到使用库A的项目中,或者是否有一种方法可以说连接库使得库A的用户只需要担心那个库而不是它所构成的库
修改
发现了一些相关的问题,但答案并没有完全解决 问题;
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 |
+------------+ +-----------+
答案 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
请注意,每当任何依赖项发生更改时,您都必须重新打包。作为用户,我本人更愿意在我的消费者解决方案中包含所有引用的库。