C++ 链接问题-尝试构建一个库并使用另一个存档

C++ 链接问题-尝试构建一个库并使用另一个存档,c++,linker,C++,Linker,是否可以构建一个使用另一个已编译库的库 我有一些make文件,通常用于构建可执行文件。在生成可执行文件时,我使用-L../include/lib1.a来包含原始库 现在,我正在构建一个单独的程序,它从可执行文件调用类,而可执行文件从未构建到库中,只是通过如下链接编译成可执行文件 ${CPP} -c ${INC} ${CFLAGS} MyFile.cpp ${OBJ} ${LIB2} -lm 其中,LIB2包括对lib1.a的引用 现在我想直接访问类MyFile.cpp,当我将它构建到自己的li

是否可以构建一个使用另一个已编译库的库

我有一些make文件,通常用于构建可执行文件。在生成可执行文件时,我使用-L../include/lib1.a来包含原始库

现在,我正在构建一个单独的程序,它从可执行文件调用类,而可执行文件从未构建到库中,只是通过如下链接编译成可执行文件

${CPP} -c ${INC} ${CFLAGS} MyFile.cpp ${OBJ} ${LIB2} -lm
其中,LIB2包括对lib1.a的引用


现在我想直接访问类MyFile.cpp,当我将它构建到自己的lib2.a库中,并尝试从新程序调用它时,我会发现它引用的类丢失了一系列错误。尽管在构建新程序时,我同时链接lib1.a和lib2.a,但这是事实,是的,您应该能够做到。这将有助于了解您得到的确切错误

如果您将源代码编译到库中,并在命令行上提供它们使用的库,编译器可能会将另一个库放入新库中。如果发生这种情况,然后有人试图针对您的库和其他库构建一个程序,他们将得到一大堆“双定义符号”错误。

应该:

-L../include/lib1.a
不是:

-L../include -llib1

即,-L表示库搜索路径,-L表示存档名称?

当您构建lib2.a时,它将不包含lib1.a中包含的对象文件


您的最终可执行文件必须同时链接这两个文件。

您能展示一下您的
make-n
吗?猜测变量替换很棘手。如果两个或多个库定义了一个符号,则只会使用其中一个(除非其他库被其他符号拉入)。将使用的库是第一个库的库,按指定顺序排列。只要先指定新的库,上述技术就不会与原始库一起产生错误。这一点很好。另外,将二进制库文件放在“include”目录中不是有点奇怪吗?