Makefile 当所有东西都存在时,libtool没有生成lo文件

Makefile 当所有东西都存在时,libtool没有生成lo文件,makefile,libtool,Makefile,Libtool,我不熟悉使用libtool。然而,这个问题似乎很奇怪。一切都在那里,但libtool说“libtool:link:'cuda_transfer.lo'不是有效的libtool对象”。但是,生成此lo文件的规则就在Makefile中。除此之外,这两个头文件也正好在它们应该在的位置,并且可以工作。你知道哪里出了问题吗 cuda_transfer.lo: particles_cuda.h ../../include/psc_particles_cuda.h 接下来是Makefile中出现cuda_t

我不熟悉使用libtool。然而,这个问题似乎很奇怪。一切都在那里,但libtool说“libtool:link:'cuda_transfer.lo'不是有效的libtool对象”。但是,生成此lo文件的规则就在Makefile中。除此之外,这两个头文件也正好在它们应该在的位置,并且可以工作。你知道哪里出了问题吗

cuda_transfer.lo: particles_cuda.h ../../include/psc_particles_cuda.h
接下来是Makefile中出现cuda_transfer.lo的另外两个地方

libsubdir_la_DEPENDENCIES = cuda_transfer.lo \

libsubdir_la_LIBADD = \
    cuda_transfer.lo \
c.lo:部分如下:

.c.lo:
    $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
    $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
    $(am__mv) $$depbase.Tpo $$depbase.Plo
#   $(AM_V_CC)source='$<' object='$@' libtool=yes \
#   DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
#   $(AM_V_CC_no)$(LTCOMPILE) -c -o $@ $<
关于cuda_transfer.lo,唯一看起来像生成规则的是

cuda_transfer.lo: particles_cuda.h ../../include/psc_particles_cuda.h

嗯,最好不要阅读
configure.ac
ever:-)但是如果您仍然愿意,
configure.ac
m4
预处理器代码和普通(bourne)shell代码片段的组合。您可以查看
info m4
info autoconf
,这些文档非常不错

关于
.lo
文件,您问题的难点部分。您的makefile似乎包含它的依赖链,但没有明确的构建规则。您可以尝试查找编译
.c
->
.lo
的通用规则,如下所示:

.c.lo:
      $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
      $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
      ...
.c.lo:
$(AM_V_CC)$(LTCOMPILE)-MT$@-MD-MP-MF$(DEPDIR)/$*.Tpo-c-o$@$<
$(上午五时)$(上午五时)$(上午六时)$(下午七时)/$*.Tpo$(下午七时)/$*.Plo
...

安装最新的libtool。删除.lo文件并再次使用“make”

试试这个:

yum -y install libtool*

然后清理干净并重新启动

你太棒了!确实有类似的事情。我把它添加到我上面的问题中。然而,我不认为这是人类友好的。。。如何解释它…这是通过libtool特定的包装器调用编译器的一行。它从.c对应文件生成.lo文件(libtool对象)。当然,这看起来有点可怕,但毕竟自动生成的Makefile并不是人们希望每天检查的内容:)。此时您需要做的是调试Makefile的依赖项/规则链。尝试发布
make-d cuda\u transfer.lo>build.log
。“无需重新生成目标
Makefile.”
之前的所有行都可以安全地忽略/删除。您是否有,比如说,
lib_LTLIBRARIES=libsubdir.la
后跟
libsubdir_la_SOURCES=cuda_transfer.c
?如您所见,我将该段添加到了我的问题描述中。生成cuda_transfer.lo的规则也被插入。那么您是如何在
LIBADD
中(预构建)libtool对象的呢?这些将不会像现在这样生成。它们应该作为适当的libtool对象存在,或者通过在中列出它们的源代码:
EXTRA_libsubdir_la_sources
。我明白了。那么实际上
libsubdir\u la\u DEPENDENCIES=cuda\u transfer.lo
一开始就提醒了我这个事实?那么如何构建
cuda\u transfer.lo
?关于
cude\u transfer.lo
的唯一生成规则是
cuda\u transfer.lo:particles\u cuda.h../。/include/psc\u particles\u cuda.h
yum -y install libtool*