我有一个同时使用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?
答案 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标志中指定它。