如何在VS2015中将外部库依赖项链接到一个静态库文件中
How to link your external library dependencies into one static library file in VS2015
情况就是这样。
我有一个库项目a,它使用和操纵其他第三方库,我们称它们为T1和T2。
然而,当我在任何其他项目中使用此库A时,它抱怨它无法打开第三方库T1和T2,即使它没有直接使用它们。当然,它通过库A间接使用它们,因为A做了适当的工作来链接和包括针对该库等的
我真的需要把这些其他库添加到使用库A的项目中吗?或者有没有一种方法可以连接库,这样库A的用户只需要担心那个库,而不需要担心它是由什么组成的。
编辑:
发现了一些相关的问题,但答案并不能完全解决问题
将静态库链接到其他静态库
如何将多个c-c库合并到一个中
第2版:
谢谢你到目前为止的回答。让我澄清一下我的情况。
我在VS2015中有一个.lib项目,我们称之为MathLib。这个MathLib在内部使用boost库来进行计算,并调用这个库BoostPath。属性文件都设置为包含并使用此BoostPath,这在库项目本身中非常有效。
我现在正在制作另一个项目User,它使用MathLib进行计算。使用此库会执行适当的includes和all操作。然而,它抱怨说,它不知道BoostPath库,因此无法使用MathLib程序库。
有人可能会争论,为什么不像MathLib库那样,将BoostPath包含到项目User中,但这没有抓住重点。我想创建一个自己的库,可以在内部使用也可以不使用其他库,但这不应该引起我的库的最终用户的任何担忧。
我可能需要在VS库管理员中设置一些东西来实现这一点,将库连接在一起或一些。但我似乎想不通。有什么想法吗?
第3版:我甚至在属性文件中找到了与这个答案中提到的完全相同的命令行。
/OUT:"MathLib.lib" "BoostMath.lib" /NOLOGO /LIBPATH:"pathlib"
然而,由于某些原因,它不起作用。如果我在使用和不使用Librian属性设置的情况下运行它,.lib二进制文件将保持不变。
自VS2010以来,此功能似乎已损坏?根据这个答案。另一个有用的问题。第4版:
我基本上想这样做,但它似乎在VS2015 中不起作用
+---------------+
| End user exe |
+---------------+
|
| some api call
|
+---------------+
| My MathLib |
+---------------+
|
|
+---------------+------------+----
| | |
+-----+------+ +-----+-----+
| BoostMath | | OtherMath |
+------------+ +-----------+
我不确定如何将库链接到项目。。。但它不应该抱怨编译器无法打开库T1和T2,除非您已将它们包含在编译器设置中。
通常,如果你没有库,它会报告找不到函数示例T1_xxxx(该函数在T1中定义)。我建议您检查项目的编译器设置
基本上静态库不进行链接,尤其是静态库无法指定自己的依赖项。你可以通过在单个obj文件(即单个源文件)周围传播#pragma comment(lib)来部分解决这个问题,但不能在库级别传播——而且你似乎无论如何都不打算修改lib源。
您的最佳选择似乎是将lib及其依赖项组合到一个单独的lib中,如所指定的,例如:
lib.exe/OUT:compositelib.lib lib1.lib lib2.lib
请注意,每当任何依赖项发生更改时,都必须重新打包。作为一名用户,我自己更希望在我的消费者解决方案中包含所有引用的lib。
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 挂起和取消挂起一个文件DLL
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- C++试图读取一个文件并输出到另一个文本文件
- 如何从另一个文件继承私有成员变量和公共函数
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 如何打开并写入一个名称取自C++中字符串的文件
- 构建一个由C和C++文件组成的库
- c++多进程编写一个唯一的文件
- 如何使用CLion在Mac上创建一个新的.txt文件
- 如何将class.cpp和class.hpp编译为一个.o文件
- 写入文件会产生一个空文件或根本没有文件
- 如何将不同的可执行文件合并到一个窗口框架中进行编码?像浏览器一样
- 生成一个生成文件,该生成文件使用Automake在一个步骤中编译和链接所有源文件
- 为什么我的 heap.h 文件给我一个LNK2001错误?
- Pantheios 不使用 MFC 应用程序写入一个文件(一个 exe + 两个 DLL)
- 在C++中一次读取一个文件一个int
- 输入/输出文件(一个字母的大写)
- 如何使用两个预编译的头文件.一个用于托管代码,另一个用于非托管代码.xxx.PCH不是一个有效的预编译头文件