Компилятор не может найти libxml/parser.h

Я на Debian 8 (Джесси), 64 бит. Я установил libxml2-dev, который теперь находится в /usr/include/libxml2/libxml.

Но когда я это делаю (как говорят libxml документы)

#include <libxml/parser.h>

Я получаю только при компиляции (с gcc)

fatal error: libxml/parser.h: no such file or directory

Примечания: На другой машине со старым 64-битным Suse, где libxml2-dev находится по тому же пути, и никакие другие переменные среды не установлены по сравнению с новым Debian, все работает отлично. Проблема возникла при миграции с одного компьютера на другой с использованием тех же make-файлов. Все остальные остальные -dev библиотеки, которые мне нужны, просто работали (с их задокументированной #include <path>) после миграции (все они были установлены с apt-get), только libxml2-dev не найдена при компиляции.

Нужно ли мне делать что-то еще, чтобы сделать libxml2-dev видимым?


person Foo Bar    schedule 24.04.2015    source источник


Ответы (4)


Попробуйте скомпилировать с явным включением, где находится файл parser.h, т.е. что-то вроде этого

g++ -I/usr/include/libxml2/


Следующие переменные среды также можно использовать для поиска файлов заголовков.

CPATH
C_INCLUDE_PATH
CPLUS_INCLUDE_PATH
OBJC_INCLUDE_PATH

Дополнительную информацию можно найти здесь

person deimus    schedule 24.04.2015
comment
Ну, это работает, очевидно. Но что может быть причиной того, что библиотека найдена в одной системе, но не найдена в другой, когда она находится в одном и том же месте и использует один и тот же make-файл? - person Foo Bar; 24.04.2015
comment
По-видимому, переменная среды INCLUDE_PATH не обновляется, чтобы включить также /usr/include/libxml2/ - person deimus; 24.04.2015
comment
просто проверьте это с помощью echo $INCLUDE_PATH - person deimus; 24.04.2015
comment
Этого вара вообще нет на обеих машинах. - person Foo Bar; 24.04.2015
comment
И C_INCLUDE_PATH? - person deimus; 24.04.2015
comment
Или, короче: на обеих машинах нет env var, в котором есть что-то с *INCL* или путь с *incl*. - person Foo Bar; 24.04.2015
comment
Запустите следующую команду `gcc -print-prog-name=cc1plus` -v, чтобы увидеть, где gcc ищет заголовочные файлы. - person deimus; 24.04.2015
comment
На обоих есть /usr/include в списке (и некоторые другие в совершенно разных местах), но нет ни одного с подпапкой libxml2. - person Foo Bar; 24.04.2015
comment
Вот почему он не находит заголовок по умолчанию, проверьте ответ еще раз. Я обновил его о том, как изменить поведение поиска файлов заголовков по умолчанию. - person deimus; 24.04.2015
comment
Но почему это работает на старом Suse Linux, где всего этого тоже нет? - person Foo Bar; 24.04.2015
comment
Конфигурации в обеих системах не могут быть такими же, как если бы они работали на одном хосте, но не работали на другом хосте. Причин может быть много, например. неправильно настроен и установлен libxml на новом хосте. Или OS конкретных изменений. Просто попробуйте проверить, установлена ​​ли библиотека точно в одни и те же каталоги в обеих системах. - person deimus; 24.04.2015

если вы его установили: sudo apt-get install libxml2-dev libxml2-doc зайдите в /usr/include/libxml2 и скопируйте или переместите все содержимое из этой папки на уровень ниже: cp -R libxml/ ../ После этого у меня это работает.

person Vlad    schedule 07.07.2016

Вы должны использовать pkg-config для передачи параметров компилятору. Как это

g++ `pkg-config --cflags libxml-2.0` example.c -o example.o

и для компоновщика:

g++ `pkg-config --libs libxml-2.0` example.o -o example
person BЈовић    schedule 08.03.2017

Я столкнулся с этой же проблемой в системе Centos. Я решил это, выполнив следующие действия:

yum install libxml2-devel
cd /usr/include
ln -s libxml2/libxml .

Вот оно. Никаких изменений в переменных среды или переключателях компилятора.

person Pat    schedule 16.03.2021