提问人:user2426290 提问时间:6/12/2022 更新时间:8/5/2022 访问量:111
无法从非 libtool 对象构建 libtool 库 - 任何解决方法?
cannot build libtool library from non-libtool objects - any workaround?
问:
我有这个makefile automake的代码:
noinst_LTLIBRARIES = libwinsane.la
libwinsane_la_SOURCES = init.c
libwinsane_la_CXXFLAGS = -I$(top_srcdir)
libwinsane_la_DEPENDENCIES = manifest.$(OBJEXT)
libwinsane_la_LIBADD = manifest.$(OBJEXT)
manifest.$(OBJEXT): manifest.rc utf8.xml
windres -o $@ $(top_builddir)/libwinsane/manifest.rc
它使用 ./configure fine 进行配置,但最终,“make”命令导致错误:
libtool: error: cannot build libtool library 'libwinsane.la' from non-libtool objects on this host: manifest.o
但是我认为manifest.o可以与init.o完全合并,我不明白为什么libtool如此难以抱怨。有什么解决办法吗?
答:
1赞
user2426290
6/13/2022
#1
noinst_LTLIBRARIES = libwinsane.la
libwinsane_la_SOURCES = init.c
libwinsane_la_CXXFLAGS = -I$(top_srcdir)
libwinsane_la_LIBADD = manifest.lo
libwinsane_la_DEPENDENCIES = manifest.$(OBJEXT)
manifest.$(OBJEXT): manifest.rc utf8.xml
libtool --mode=compile windres -o $@ $(top_builddir)/libwinsane/manifest.rc
1赞
jjorge
8/5/2022
#2
由于涉及 libtool,因此将使用 .lo 后缀来保持一致性。这应该有助于检测源文件的双重使用 (*)。
.rc.${OBJEXT}:
${RC} $< $@
.rc.lo:
libtool --mode=compile --tag=RC ${RC} $< $@
相应的主makefile片段来使用它,我会这样做:
lib_LTLIBRARIES = libfoo.la
libfoo_la_SOURCES = manifest.rc
libfoo_la_LIBADD = manifest.lo
manifest.lo: utf8.xml
# Alternatively:
# bin_PROGRAMS = foo
# foo_SOURCES = manifest.rc
# foo_LDADD = manifest.o
# (*) Be wary of the usual "object 'manifest.$(OBJEXT)' created both with libtool and without"
如果 automake 将来获得了 .rc 源代码的默认规则,这似乎是一种向前兼容的方法,因为 automake 只会再次将 manifest.lo 添加到 LIBADD,这是幂等的。
对于默认的 RC,您可以添加到 configure.ac 中:
LT_PROG_RC
评论