2012-02-01 142 views
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?

回答

1

首先,在任何libxml2標頭之前包含正確的<iconv.h>,即使在不使用iconv的源中也是如此。這將阻止libxml頭文件包含任何其他版本(假設頭文件守護程序是相同的)。

對於長期修復,您需要修復系統(因爲它實際上已經損壞)。您不能在/usr/local中安裝軟件包,然後希望能夠單獨啓用或禁用它們。相反,請使用單獨的前綴來安裝軟件包。例如,在/opt/libxml2中安裝libxml2,並在/opt/iconv中安裝iconv。

+0

是的,完美的工作。我希望稍後能夠整理機器配置。這是一個共享機器,但是我錯誤地設置了它 - 我從一箇舊的AIX盒子複製了一個項目,其中內置的iconv非常缺乏基本的字符集(例如UTF-8),因此構建了相同的GNU iconv庫讓它在Linux上運行。 – asc99c 2012-02-02 09:07:24

0

如果你做-I/usr/include -I/usr/local/include,gcc應該在/ usr/include首先查找...除了gcc以不同的方式處理系統頭文件,所以這是行不通的。作爲一個醜陋的黑客攻擊,您可以將/usr/include/iconv.h複製到不同的目錄,並在/ usr/local/include之前的-I標誌中指定它。