2

我有一个同时使用 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?

4

2 回答 2

1

首先,<iconv.h>在任何 libxml2 标头之前包含正确的标头,即使在不使用 iconv 的源中也是如此。这将防止 libxml 标头包含任何其他版本(假设标头保护是相同的......)。

对于长期修复,您将需要修复您的系统(因为它实际上已损坏)。您不能在其中安装软件包,/usr/local然后期望能够单独启用或禁用它们。相反,请使用单独的前缀安装您的软件包。例如,在 中安装 libxml2,在 中/opt/libxml2安装 iconv /opt/iconv

于 2012-02-01T20:36:14.957 回答
0

如果你这样做-I/usr/include -I/usr/local/include了,gcc 应该首先查看 /usr/include ......除了 gcc 以不同的方式处理系统头文件,所以这不起作用。作为一个丑陋的黑客,您可以将 /usr/include/iconv.h 复制到不同的目录并在 /usr/local/include 之前的 -I 标志中指定它。

于 2012-02-01T20:24:54.177 回答