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を検索する場所を指示するために何かを行うことはできますか?

4

2 に答える 2

1

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

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

于 2012-02-01T20:36:14.957 に答える
0

そうした場合-I/usr/include -I/usr/local/include、gccは最初に/ usr / includeを調べる必要があります...ただし、gccはシステムヘッダーを異なる方法で処理するため、機能しません。醜いハックとして、/ usr / include / iconv.hを別のディレクトリにコピーし、/ usr / local/includeの前の-Iフラグで指定できます。

于 2012-02-01T20:24:54.177 に答える