【问题标题】:How to modify include path for a specific include如何修改特定包含的包含路径
【发布时间】:2012-02-24 11:42:57
【问题描述】:

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

【问题讨论】:

    标签: c gcc libxml2 libiconv


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 是的,效果很好。我希望稍后能够整理出机器配置。这是一台共享机器,但是是我错误地设置了它——我从一个旧的 AIX 机器中复制了一个项目,其中内置的 iconv 严重缺乏基本字符集(例如 UTF-8),因此构建了相同的 GNU iconv 库,让它在 Linux 机器上运行。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-10
      • 1970-01-01
      相关资源
      最近更新 更多