我有这个目录结构
prog/libA
prog/libB
在libA中,我有一个Makefile.am,如下所示:
noinst_LTLIBRARIES = libA.la
libA_la_SOURCES = ...
libA_la_LIBADD = ... $(LAPACK)
其中LAPACK是我系统的lapack安装。这按预期工作。但是,在libB中我有这个:
noinst_LTLIBRARIES = libB.la
bin_PROGRAMS = compLibB
libB_la_SOURCES = ...
compLibB_SOURCES = ...
libB_LIBADD = $(top_builddir)/libA/libA.la ...
compLibB_LDADD = libB.la
哪个不起作用。 compLibB的链接阶段抱怨对LAPACK的未定义引用,除非我将最后一行更改为
compLibB_LDADD = libB.la $(LAPACK)
但这似乎是多余的。当我构建$(LAPACK)
便利库时,我已经在libA.la
中链接了吗?它是不洁净的,因为现在compLibB必须关注libA的细节。是否无法在libA构建阶段链接LAPACK库,以便我不必在compLibB构建阶段重新指定它?
答案 0 :(得分:1)
当我构建libA.la便利lib时,我是否已经在$(LAPACK)中链接了?
正如你的链接器已经告诉过你的那样,没有。作为便利库的libA.la
有点像静态库(目标文件的集合)。
这是不洁净的,因为现在compLibB必须关注libA的细节。是否无法在libA构建阶段链接LAPACK库,以便我不必在compLibB构建阶段重新指定它?
在构建libA.la
时,您不需要指定LAPACK库,因为最终链接尚未发生。我没有办法在没有libA
共享库的情况下完成你想要的东西。
答案 1 :(得分:0)
这实际上应该起作用,因为_LIBADD
旨在使依赖性传递和工作。另一方面,使用$(top_builddir)
可能会有不同的问题,因为libtool处理与相对路径和绝对路径链接的不同库。