链接问题 - 尝试构建库并使用其他存档

时间:2011-01-18 23:12:50

标签: c++ linker

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

我有一些用于正常构建可执行文件的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

中进行链接。

3 个答案:

答案 0 :(得分:1)

应:

-L../include/lib1.a

不是:

-L../include -llib1

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

答案 1 :(得分:0)

是的,你应该能够做到。看到你得到的确切错误会很有帮助。

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

答案 2 :(得分:0)

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

您的最终可执行文件必须链接到它们。