当一切都在那里时,libtool没有生成一个lo文件

时间:2014-02-08 06:02:25

标签: 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_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 $@ $<

如何解释这个人类不友好的代码。 = =

以下是Brett建议的代码段。

noinst_LTLIBRARIES = libsubdir.la
libsubdir_la_SOURCES = \
        psc_fields_cuda.c \
        psc_particles_cuda.c \
        psc_push_particles_cuda.c \
        psc_push_fields_cuda.c \
        psc_bnd_cuda.c \
        psc_bnd_particles_cuda.c \
        psc_bnd_fields_cuda.c \
        b40c/kernel_utils.h \
        b40c/radixsort_kernel_common.h \
        b40c/radixsort_key_conversion.h \
        b40c/radixsort_reduction_kernel.h \
        b40c/radixsort_scanscatter_kernel.h \
        b40c/radixsort_scanscatter_kernel3.h \
        b40c/radixsort_scanscatter_kernel4.h \
        b40c/radixsort_spine_kernel.h \
        b40c/vector_types.h \
        cuda_common.h \
        cuda_sort2.h \
        cuda_sort2_spine.h \
        particles_cuda.h \
        psc_bnd_cuda.h \
        psc_bnd_cuda_fields.h \
        psc_cuda.h

libsubdir_la_LIBADD = \
        cuda_transfer.lo \
        cuda_spine.lo \
        cuda_sort2.lo \
        cuda_sort3.lo \
        cuda_exchange_particles.lo \
        cuda_exclusive_scan_2.lo \
        cuda_push_part_yz_1vb.lo

唯一看起来像关于cuda_transfer.lo的生成规则是

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

3 个答案:

答案 0 :(得分:1)

嗯,最好不要永远阅读configure.ac :-)但如果您仍然希望,configure.acm4预处理程序代码和普通(bourne)shell代码段的组合。您可以查看info m4info autoconf,文档相当不错。

关于.lo文件的问题的难点部分。您的makefile似乎包含依赖链,但没有明确的构建规则。您可以尝试找到用于编译.c - &gt;的常用规则。 .lo,就像这样:

.c.lo:
      $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
      $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
      ...

答案 1 :(得分:1)

尝试一下:

yum -y install libtool*

然后清理并重新启动

答案 2 :(得分:0)

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