2017-03-11 6 views
0

third party toolをビルドしようとしています。私はC++のビルドツールにあまり慣れていないので、これをどのように解決すべきか分かりません。g ++はそれが存在する最初のインクルードパスからヘッダファイルを受け取りませんか?

dcp2icc.src/dcp2icc.cpp 6行目です:

#include "dng_camera_profile.h" 

dng_sdk_1_2/dng_sdk/source/dng_camera_profile.h行39:

$ ls -l dng_sdk_1_2/dng_sdk/source/dng_hue_sat_map.h fixes/dng_sdk/dng_hue_sat_map.h 
-r--r--r-- 1 user users 3141 Apr 9 2008 dng_sdk_1_2/dng_sdk/source/dng_hue_sat_map.h 
-rw-r--r-- 1 user users 3124 Oct 31 2015 fixes/dng_sdk/dng_hue_sat_map.h 

最後に、これはコマンドです:

#include "dng_hue_sat_map.h" 

dng_hue_sat_map.hのファイルがあります。実行します:

g++ -o build/dcp2icc/dcp2icc.o -c -m32 -O2 -iquote- -DUNIX_ENV=1 -D_FILE_OFFSET_BITS=64 -DkBigEndianHost=0 -Idcp2icc.src -Ifixes/dng_sdk -Idng_sdk_1_2/dng_sdk/source -INone dcp2icc.src/dcp2icc.cpp 

私は-Ifixes/dng_sdk-Idng_sdk_1_2/dng_sdk/source前に来るので、fixes/dng_sdk/dng_hue_sat_map.hが使用されることを期待するが、これはそうではありません。

In file included from dng_sdk_1_2/dng_sdk/source/dng_camera_profile.h:39:0, 
       from dcp2icc.src/dcp2icc.cpp:6: 
dng_sdk_1_2/dng_sdk/source/dng_hue_sat_map.h:129:8: error: extra qualification 'dng_hue_sat_map::' on member 'operator==' [-fpermissive] 
    bool dng_hue_sat_map::operator== (const dng_hue_sat_map &rhs) const; 
     ^~~~~~~~~~~~~~~ 

時にヘッダファイルG ++を使用するファイルを選択しない方法2つのインクルード場所に存在しますか? includeがどのシーケンスに入っているかは重要ですか?

-I dirの

ヘッダファイルを検索するディレクトリのリストにディレクトリdirを追加します。

man g++は、単純に言って、これを持っています。 -Iで指定されたディレクトリは、標準システムがディレクトリをインクルードする前に検索されます。ディレクトリdirが標準のシステムインクルードディレクトリの場合、このオプションは無視され、システムディレクトリのデフォルトの検索順序とシステムヘッダの特殊な処理が確実に無効にならないようにします。 dirが "="で始まる場合、 "="はsysroot接頭辞に置き換えられます。 --sysrootと-isysrootを参照してください。

GCC specは、私の知る限り、私が見ているものの反対である、次の言葉:

あなたは、コマンドラインで複数の-Iオプションを指定することができ、その場合には、ディレクトリは左から右の順に検索されます。

+0

これはGCCの仕様であり、何が起こったのか私の経験です。他にも問題があります。 –

答えて

2

#include <...>フォームではなく#include "..."フォームを使用しています。

ファイルdng_sdk_1_2/dng_sdk/source/dng_camera_profile.hには、"dng_hue_sat_map.h"が含まれています。 #include "..."は、それを含むファイルに相対的な最初の検索であるため、-Iオプションに関係なく、dng_sdk_1_2/dng_sdk/sourceで最初に検索します。

+0

ああ。元のコードを変更できないため、推奨される修正は何ですか?それを置換ファイルで上書きするだけですか? – l0b0

+1

@ l0b0私のアプローチは 'dng_camera_profile.h'のコピーを' fixes/dng_sdk'ディレクトリ(またはシンボリックリンク)に置くことだと思います。それは '#include" dng_camera_profile.h "'がそのバージョンを拾い上げると、そこから '' dng_hue_sat_map.h ''もまたピックアップします。 – hvd

関連する問題