如何修改特定包含的包含路径

时间:2012-02-01 19:19:37

标签: c gcc libxml2 libiconv

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

答案 0 :(得分:1)

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

对于长期修复,您需要修复系统(因为它实际上已被破坏)。您无法在/usr/local中安装软件包,之后又希望能够单独启用或禁用它们。而是安装包含单独前缀的包。例如,在/opt/libxml2中安装libxml2,并在/opt/iconv中安装iconv。

答案 1 :(得分:0)

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