我有我的主应用程序和两个库:foo和bar。 foo在某些方法中使用bar,并且在LDADD中指定了它。 我的主应用程序使用foo和间接bar,因此它在Makefile中有LDADD = foo。
在这种情况下,如果我还没有为我的主应用程序将LD库添加到LDADD,我将收到编译错误。
未定义的参考;它说来自foo的.so文件需要来自bar的.so文件。
我不明白这一点。 一旦我用LDADD = bar编译(非静态)foo,为什么我在编译使用foo的应用程序时又需要它?
答案 0 :(得分:1)
您没有指定foo
和/或bar
是否是作为源树的一部分构建的libtool库。如果是,libtool应该采取链接。即,因为foo
需要bar
作为图书馆的一部分:
libfoo_la_LIBADD = ../bar/libbar.la # in: foo/Makefile.am
和
prog_LDADD = ../foo/libfoo.la # in: app/Makefile.am