2012-02-01 10 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

まず、iconvを使用しないソースでも、libxml2ヘッダーの前に正しい<iconv.h>を入れてください。これにより、libxmlヘッダに他のバージョンを含めることができなくなります(ヘッダガードが同じであると仮定して...)。

長期的には、システムを修正する必要があります(実際は壊れているため)。 /usr/localにパッケージをインストールすることはできません。その後、パッケージを個別に有効または無効にすることができます。代わりに、別々のプレフィックスでパッケージをインストールしてください。たとえば、libxml2を/opt/libxml2にインストールし、iconvを/opt/iconvにインストールします。

+0

これは完璧に機能しています。私はうまくいけば、後でマシンの設定を整理することができるでしょう。共有マシンですが、間違って設定していたのは私でした。組み込みのiconvが基本的な文字セット(UTF-8など)が不足している古いAIXボックスからプロジェクトをコピーして、同じGNUを作成しましたiconvライブラリを使って、Linuxボックスで動作させることができます。 – asc99c

0

-I/usr/include -I/usr/local/includeを実行すると、gccはシステムのヘッダーを別の方法で処理するため、/ usr/include first ...を検索する必要があります。醜いハッキングとして、/usr/include/iconv.hを別のディレクトリにコピーして、/ usr/local/includeの前に-Iフラグで指定することができます。

関連する問題