Не удается скомпилировать при использовании libxml

У меня есть исходный файл, который я могу запустить через терминал, используя

gcc source.c -I/usr/include/libxml2 -lxml2 -o output

но когда я #include исходный файл, который включает исходные файлы libxml, компилятор жалуется, что libxml/xmlmemory.h: , libxml/parser.h:, libxml/xpath.h не может быть найден: нет такого файла или каталога.


person some_id    schedule 04.04.2011    source источник


Ответы (3)


Вам всегда нужно сохранять -I/usr/include/libxml2 в вашем операторе gcc, чтобы он мог найти файлы заголовков.

person Benoit Thiery    schedule 04.04.2011
comment
Что, если этот файл нужно скомпилировать как часть гораздо большей системы? Должен ли я просто скопировать необходимые файлы в каталог, где хранится этот исходный файл? - person some_id; 05.04.2011
comment
Ах ах. Надеюсь, вы не включаете заголовки из ваших заголовочных файлов. Это было бы отстойно. Убедитесь, что вы зависите от libxml2 только внутренне (в ваших единицах компиляции, то есть в файлах .c/.cxx/.cpp) - person sehe; 05.04.2011
comment
Я включаю в файлы .c. но не работает. У меня нет файлов libxml в том же каталоге, что и .c, который я компилирую - person some_id; 05.04.2011
comment
@ Helium3, да, любые файлы c, которые должны использовать libxml, должны быть скомпилированы с параметром -I. - person Benoit Thiery; 05.04.2011

Вы также можете использовать xml2-config --cflags --libs для получения флагов компиляции для добавления.

kjp@vbox:~/Dev/ScratchDir$ xml2-config --cflags --libs
-I/usr/include/libxml2
-lxml2
kjp@vbox:~/Dev/ScratchDir$
person kjp    schedule 08.07.2012

Похоже, источник ссылается на libxml, а не на libxml2 Можете ли вы убедиться, что

/usr/include/libxml2/libxml/xmlmemory.h

на самом деле доступен? (попробуй посмотреть)

Вы не компилируете заголовки, заголовки просто должны быть доступны как «описание» того, что реализуют библиотеки.

person sehe    schedule 04.04.2011
comment
Возможно ли, что файлы не могут быть найдены, потому что они не находятся в той же папке, что и компилируемый код? Я включаю вот так #include ‹libxml/xpath.h› . я не указываю /usr/include/libxml2/libxml - person some_id; 05.04.2011
comment
Это то, для чего предназначен -I/usr/include/libxml2 - person sehe; 05.04.2011
comment
Итак, как мне это сделать без вызова I/usr/include/libxml2 -lxml2 при компиляции? - person some_id; 05.04.2011
comment
Почему ты бы так поступил? Создайте скрипт компиляции/создайте файл, если считаете это утомительным. Использование абсолютных путей сделает ваш код непереносимым на другие машины. - person sehe; 05.04.2011
comment
Дело в том, что мой код является частью гораздо большей системы. Это встроенный проект с несколькими частями системы. Поэтому его не нужно компилировать с множеством аргументов командной строки. Так что я должен написать makefile? - person some_id; 05.04.2011
comment
Да, смотрите мой другой комментарий здесь: stackoverflow. ком/вопросы/5544074/ - person sehe; 05.04.2011
comment
@sehe: ссылка, которую вы разместили, выглядит так же, как и страница, на которую вы добавили комментарий. У вас была другая страница, которую вы хотели, чтобы мы посмотрели? ;-) - person shellter; 05.04.2011
comment
@shelter: это связано с другим ответом с моим другим комментарием, ты - person sehe; 05.04.2011
comment
@sehe: я ответил на ваш другой комментарий. Я все еще не знаю, что делать. Потому что, если код будет скомпилирован на пандаборде, libxml все равно должен быть там и может иметь другой путь. Хотя пандаборд будет работать под управлением Ubuntu. - person some_id; 05.04.2011