0

我有我的主应用程序和两个库:foo 和 bar。foo 在某些方法中使用 bar,它在 LDADD 中指定。我的主应用程序使用 foo,并间接使用 bar,所以它在 Makefile 中有 LDADD = foo。

在这种情况下,如果我没有将 bar 库添加到我的主应用程序的 LDADD,我会得到一个编译错误。

未定义参考; 它说来自 foo 的 .so 文件需要来自 bar 的 .so 文件。

我不明白这一点。一旦我用 LDADD = bar 编译(非静态) foo ,为什么我在编译使用 foo 的应用程序时再次需要它?

4

1 回答 1

1

您没有指定是否foo和/或barlibtool 库是作为源代码树的一部分构建的。如果是,libtool 应该接受链接。即,因为foo需要bar作为库的一部分:

libfoo_la_LIBADD = ../bar/libbar.la # in: foo/Makefile.am

和,

prog_LDADD = ../foo/libfoo.la # in: app/Makefile.am
于 2012-11-09T13:10:28.957 回答