2012-11-07 44 views
0

我有我的主應用程序和兩個庫:foo和bar。 foo在某些方法中使用bar,並在LDADD中指定它。 我的主應用程序使用foo和間接的bar,所以它在Makefile中有LDADD = foo。只連接一次圖書館

在這種情況下,如果我不將bar庫添加到我的主應用程序的LDADD中,我將得到一個編譯錯誤。

未定義的參考;它說foo的.so文件需要bar的.so文件。

我不明白這一點。 一旦我用LDADD = bar編譯(非靜態)foo,爲什麼我在編譯使用foo的應用程序時需要它?

+0

與[在Ubuntu的libtool](一個已知的問題的可能的複製http://stackoverflow.com/questions/ 11802727/libtool的-犯規-提供庫依賴性到鏈接)。你在Ubuntu上使用libtool嗎? – ldav1s

回答

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