12

Rcppを使用してパッケージをビルドし、RパッケージでOpenCVのコードを使用しようとしています。自分のマシンでcコードをコンパイルすると、正常に動作します。

たとえば、次の構文をローカルで使用して、facedetect.cppコードをコンパイルしています。

g++ `pkg-config --cflags opencv` facedetect.cpp -o facedetect `pkg-config --libs opencv` 

ただし、次のコマンドを使用してパッケージに含めようとすると、次のようになります。

R CMD SHLIB  facedetect.cpp -o facedetect

私のmakevarsファイルで次のように定義されています。

PKG_CPPFLAGS=  `$(R_HOME)/bin/Rscript -e 'Rcpp:::CxxFlags()'` 
PKG_LIBS = `$(R_HOME)/bin/Rscript -e "Rcpp:::LdFlags()"`  
PKG_CXXFLAGS= `pkg-config --cflags opencv` `pkg-config --libs opencv`

Rは以下を実行します。

g++ -arch x86_64 -I/Library/Frameworks/R.framework/Resources/include -I/Library/Frameworks/R.framework/Resources/include/x86_64 `pkg-config --cflags opencv` `pkg-config --libs opencv`  `/Library/Frameworks/R.framework/Resources/bin/Rscript -e 'Rcpp:::CxxFlags()'`  -I/usr/local/include    -fPIC  -g -O2 -c facedetect.cpp -o facedetect.o

次のエラーメッセージが表示されます。

i686-apple-darwin10-g++-4.2.1: -lopencv_core: linker input file unused because linking not done
i686-apple-darwin10-g++-4.2.1: -lopencv_imgproc: linker input file unused because linking not done
i686-apple-darwin10-g++-4.2.1: -lopencv_highgui: linker input file unused because linking not done
i686-apple-darwin10-g++-4.2.1: -lopencv_ml: linker input file unused because linking not done
i686-apple-darwin10-g++-4.2.1: -lopencv_video: linker input file unused because linking not done
i686-apple-darwin10-g++-4.2.1: -lopencv_features2d: linker input file unused because linking not done
i686-apple-darwin10-g++-4.2.1: -lopencv_calib3d: linker input file unused because linking not done
i686-apple-darwin10-g++-4.2.1: -lopencv_objdetect: linker input file unused because linking not done
i686-apple-darwin10-g++-4.2.1: -lopencv_contrib: linker input file unused because linking not done
i686-apple-darwin10-g++-4.2.1: -lopencv_legacy: linker input file unused because linking not done
i686-apple-darwin10-g++-4.2.1: -lopencv_flann: linker input file unused because linking not done
g++ -arch x86_64 -dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup     -single_module -multiply_defined suppress -L/usr/local/lib -o facedetect facedetect.o -I/opt/local/include/opencv -I/opt/local/include -L/opt/local/lib -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_contrib -lopencv_legacy -lopencv_flann -F/Library/Frameworks/R.framework/.. -framework R -Wl,-framework -Wl,CoreFoundation

私はC++の経験が十分でないため、これらのエラーメッセージを理解していません。私のローカルg++コンパイラのようにRにC++コードをコンパイルさせる方法を知っている人はいますか?「-c」フラグが問題であるかどうかはわかりません...残念ながら、グーグルまたはライティングRエクステンションのマニュアルで答えを見つけることができませんでした。ありがとう!

私が旗に関して抱えていた最初の問題を理解するのを手伝ってくれた以前のレスポンダーに感謝します。

4

2 に答える 2

5

Makevars-File を src ディレクトリに配置し、PKG_CPPFLAGS(プリプロセッサとインクルード) とPKG_CXXFLAGS(コンパイラ フラグ)を指定する必要があります。詳細は、「R 拡張機能の記述」のセクション 1.2.1 および 5.5 にあります。

于 2011-03-15T08:37:43.583 に答える
4

これはMakevars実際に私のために働いたファイルです:

PKG_LIBS = `pkg-config --libs opencv`
PKG_CFLAGS = `pkg-config --cflags opencv`
PKG_CXXFLAGS = `pkg-config --cflags opencv` `Rscript -e 'Rcpp:::CxxFlags()'`
PKG_CFLAGS = `pkg-config --cflags opencv`

お役に立てれば。

于 2014-07-05T06:34:11.043 に答える