Как изменить путь включения для конкретного включения - PullRequest
2 голосов
/ 01 февраля 2012

У меня есть приложение, которое использует функциональность iconv и libxml2.

libxml2 установлен в /usr/local, поэтому я использую флаг компилятора -I/usr/local/include/usr/local есть также отдельная установка libiconv, которую я не хочу использовать (я хочу использовать ее в glibc).

В своем коде приложения я могу решить проблему iconv, выполнив:

#include </usr/include/iconv.h>

Однако проблема заключается в том, что библиотека libxml2 также использует iconv для своих внутренних целей.И заголовки libxml2 просто делают:

#include <iconv.h>

Есть ли способ обойти это?Например, я могу сделать что-нибудь в своем коде, где я включаю заголовки libxml, чтобы сказать ему, где искать iconv?

Ответы [ 2 ]

1 голос
/ 02 февраля 2012

Во-первых, добавьте правильный <iconv.h> перед любыми заголовками libxml2, даже в источниках, которые не используют iconv.Это предотвратит включение заголовков libxml любой другой версии (при условии, что защита заголовков одинакова ...).

Для долгосрочного исправления вам нужно будет починить вашу систему (потому что на самом делесломан).Вы не можете устанавливать пакеты в /usr/local, а затем ожидать, что сможете включать или отключать их по отдельности.Вместо этого установите ваши пакеты с отдельными префиксами.Например, установите libxml2 в /opt/libxml2 и установите iconv в /opt/iconv.

0 голосов
/ 02 февраля 2012

Если вы делаете -I/usr/include -I/usr/local/include, gcc должен сначала посмотреть в / usr / include ... за исключением того, что gcc по-разному обрабатывает системные заголовки, так что это не работает.Как некрасивый хак, вы можете скопировать /usr/include/iconv.h в другой каталог и указать его в флаге -I перед /usr/local/include.

...