【发布时间】:2014-02-08 06:02:24
【问题描述】:
我是使用 libtool 的新手。然而,这个问题似乎很奇怪。一切都在那里,但 libtool 说“libtool:链接:'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
【问题讨论】:
-
你有没有,比如说,
lib_LTLIBRARIES = libsubdir.la,后跟libsubdir_la_SOURCES = cuda_transfer.c? -
我将该段添加到我的问题描述中,如您在上面看到的。生成 cuda_transfer.lo 的规则也被插入。
-
那么,您究竟是如何(预构建)
LIBADD中的 libtool 对象的?这些将不会像现在这样生成。它们应该作为适当的 libtool 对象存在,或者通过在以下位置列出它们的来源:EXTRA_libsubdir_la_SOURCES。 -
我明白了。所以实际上
libsubdir_la_DEPENDENCIES = cuda_transfer.lo一开始就提醒了我这个事实?那么我该如何构建cuda_transfer.lo?唯一看起来像关于cude_transfer.lo的生成规则是Makefile 中的cuda_transfer.lo: particles_cuda.h ../../include/psc_particles_cuda.h。