c++ - 是否可以在 C/C++ 中的其他库中包含静态链接库?

标签 c++

在我的项目中,我在静态链接库中有一些共享代码,该库由多个子项目使用,每个子项目都构建自己的可执行文件。我使用 ar 从 .o 文件创建库。部分共享代码依赖于静态链接的第三方库。

目前,我必须在每个 makefile(对于每个可执行文件)中包含所有第三方库,并将它们传递给 g++。是否可以将这些库包含在子项目共享的一个库中,这样我在构建不同的可执行文件时就不必显式引用它们?或者我的方法总体上有问题吗?

最佳答案

可以将您正在使用的所有静态库打包在一个大库中。你不希望这样。

处理这种情况的常用方法是在顶级 makefile 中定义变量,或者在多个 makefile 包含的 .inc 文件中定义变量:

MY_LIBS = -lOne -lTwo
MY_LDFLAGS = -L /path/to/libs

然后将这些变量添加到标准变量

LDLIBS += $(MY_LIBS)
LDFLAGS += $(MY_LDFLAGS)

以上变量由 GNU Make 隐式链接规则使用;如果您使用自己的规则,请务必使用这些变量,如下所示:

...
g++ $^ $(LDLIBS) $(LDFLAGS) -o $@

查看来自已建立的开源项目的几个 makefile 以获取灵感。

引用文献:

关于c++ - 是否可以在 C/C++ 中的其他库中包含静态链接库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32222560/

相关文章:

c++ - 为什么创建堆数组的时间复杂度不是O(log(n!))而是O(nlogn)?

c++ - C++ STL set 中的计数是如何工作的?

c++ - Visual Studio : E0349 no operator << matches these operands (but no strings in code)

C++,错误不匹配运算符<<

c++ - clang 是否已经支持 C++11?

c++ - 快速傅里叶变换

c++ - boost::bind 作为左值对象

c++ - 构造函数内的错误 C2512 : no appropriate default constructor available: declaration of a object with arguments!

c++ - 为什么 memset() 循环 1M 次和 10M 次花费相同的时间?

C++ deque 与 vector 和 C++ map 与 Set