首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能从非libtool对象构建libtool库-任何解决办法?

不能从非libtool对象构建libtool库-任何解决办法?
EN

Stack Overflow用户
提问于 2022-06-12 14:15:09
回答 2查看 34关注 0票数 1

我有这个makefile automake的代码:

代码语言:javascript
复制
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

它配置得很好,但是最后,“make”命令的结果会出现错误:

代码语言:javascript
复制
libtool:   error: cannot build libtool library 'libwinsane.la' from non-libtool objects on this host: manifest.o

但我相信,libtool.o完全可以与init.o合并。o,我不明白,为什么libtool会抱怨这么难。有什么解决办法吗?

EN

回答 2

Stack Overflow用户

发布于 2022-06-13 09:42:11

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2022-08-05 06:58:17

因为涉及到libtool,所以为了保持一致性,可以使用.lo后缀。这将有助于检测源文件的双重使用(*)。

代码语言:javascript
复制
.rc.${OBJEXT}:
    ${RC} $< $@
.rc.lo:
    libtool --mode=compile --tag=RC ${RC} $< $@

相应的主makefile片段来使用它,我会这样做:

代码语言:javascript
复制
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中:

代码语言:javascript
复制
LT_PROG_RC
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72593009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档