簡體   English   中英

嘗試使用R的g ++編譯器編譯C ++代碼時出現“鏈接器輸入文件”未使用的錯誤

[英]“linker input file” unused error when trying to compile C++ code using R's g++ compiler

我正在嘗試在R包中使用來自OpenCV的一些代碼,並使用Rcpp構建該包。 當我在計算機上編譯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”標志是否存在問題。不幸的是,我無法通過Google或《 Writing R Extensions》手冊找到答案。 謝謝!

幾點:

  • 這些是來自編譯步驟的警告,告訴您編譯步驟不需要庫(因為鏈接時會出現庫)

  • 您正在嘗試融合兩個中等復雜的系統。

  • 我建議您退后一步-您知道如何編譯示例文件,現在使用Makevars設置對更簡單的相關R包執行相同的操作。 有一些使用Rcpp和GSL作為通用外部庫的軟件包。 您可以嘗試查看它們的工作方式,並了解它們的模式。

  • 一旦確定了該模式,即可將其應用於OpenCV。

抱歉,但沒有明顯的捷徑。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM