automake 和 libtool 中的链接库问题

Posted

技术标签:

【中文标题】automake 和 libtool 中的链接库问题【英文标题】:Issue with linked lib in automake and libtool 【发布时间】:2011-04-19 13:12:50 【问题描述】:

您好,我正在开发一个 C libtool 库。我在添加依赖库 xml2 时遇到问题。我决定使用 GNU autotools,蝙蝠我很新手。

在 configure.ac 我有:

# Checks for libraries.
AC_SEARCH_LIBS([xmlCleanupParser],[xml xml2])
AC_SEARCH_LIBS([xmlSAXVersion],[xml xml2])
AC_SEARCH_LIBS([xmlSAXUserParseFile],[xml xml2])

在 MakeFile.ac 中:

nobase_include_HEADERS =  \
    foo.h \
    bar.h \
    foo/foo.h \
    foo/bar.h 

lib_LTLIBRARIES = libfoo.la
libfoo_la_SOURCES = \
    foo.c \
    bar.c \
        sax2.c \
    foo/foo.c \
    foo/bar.c 


check_PROGRAMS = test
test_SOURCES = test.c
test_LDADD = libfoo.la

配置脚本输出正确:

checking for library containing xmlCleanupParser... -lxml2

在生成的Makefile中有:

LIBS = -lxml2 
...
libfoo.la: $(libfoo_la_OBJECTS) $(libfoo_la_DEPENDENCIES) 
$(LINK) -rpath $(libdir) $(libfoo_la_OBJECTS) $(libfoo_la_LIBADD) $(LIBS)

当我启动 Make 时:

libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I.. -g -O2 -MT bar.lo -MD -MP -MF .deps/bar.Tpo -c bar.c -o bar.o >/dev/null 2>&1
mv -f .deps/bar.Tpo .deps/bar.Plo
/bin/sh ../libtool --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I. -I..     -g -O2 -MT sax2.lo -MD -MP -MF .deps/sax2.Tpo -c -o sax2.lo sax2.c
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I.. -g -O2 -MT sax2.lo -MD -MP -MF .deps/sax2.Tpo -c sax2.c  -fno-common -DPIC -o .libs/sax2.o
sax2.c:21:29: error: libxml/encoding.h: No such file or directory
sax2.c:22:31: error: libxml/xmlversion.h: No such file or directory
sax2.c:23:27: error: libxml/parser.h: No such file or directory
sax2.c:24:30: error: libxml/xmlmemory.h: No such file or directory
sax2.c:25:25: error: libxml/SAX2.h: No such file or directory
sax2.c:26:25: error: libxml/tree.h: No such file or directory
sax2.c:27:30: error: libxml/xmlstring.h: No such file or directory

make命令没有链接libxml2,谁能帮帮我?

【问题讨论】:

【参考方案1】:

您的问题不在于链接,而在于编译。注意它是如何说“编译”的,然后抱怨缺少头文件。这些标头应该在您的系统上的/usr/include/ 下,因此您应该将-I/usr/include 添加到编译命令中(而现​​在您有两个-I 选项,用于...)。

【讨论】:

【参考方案2】:

您可以简单地使用PKG_CHECK_MODULES([libxml], [libxml-2.0]),而不是在AC_SEARCH_LIBS 上浪费时间。

【讨论】:

以上是关于automake 和 libtool 中的链接库问题的主要内容,如果未能解决你的问题,请参考以下文章

如何将共享库与 --as-needed 与 automake 链接?

安装 Autoconf, Automake & Libtool

在构建期间覆盖使用 automake/libtool 构建的共享库中的安装路径,以便在无法使用 DYLD_LIBRARY_PATH 时进行测试

如何正确更新 m4、autoconf、automake 和 libtool? Mac OSX

Automake/libtool 不构建共享库

如何从 automake/libtool 库中获取符号列表?