Проблема со связанной библиотекой в automake и libtool

#c #gcc #libxml2 #automake #libtool

#c #gcc #libxml2 #automake #libtool

Вопрос:

Привет, я разрабатываю библиотеку 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
  

Корректный вывод скрипта configure:

 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>amp;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:

Ваша проблема не в компоновке, а в компиляции. Обратите внимание, как он говорит «compile», а затем жалуется на отсутствие файлов заголовков. Эти заголовки должны быть в вашей системе под /usr/include/ , поэтому вы должны добавить -I/usr/include в команду компиляции (тогда как прямо сейчас у вас есть два варианта -I для . и .. ).

Ответ №2:

Вместо того, чтобы тратить время на AC_SEARCH_LIBS , вы могли бы просто использовать PKG_CHECK_MODULES([libxml], [libxml-2.0]) .