c++ - 尝试使用 R 的 g++ 编译器编译 C++ 代码时出现 "linker input file"未使用错误

标签 c++ r opencv compiler-errors rcpp

我正在尝试在 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++ 经验。有谁知道如何让 R 像我本地的 g++ 编译器那样编译 C++ 代码?我不确定“-c”标志是否是问题所在......不幸的是我无法通过谷歌或 Writing R Extensions 手册找到答案。谢谢!

最佳答案

几点:

  • 这些是来自编译步骤的警告,告诉您编译步骤不需要库(因为链接时会出现这些库)

  • 您正在尝试融合两个中等复杂的系统。

  • 我建议退后一步——您知道如何编译示例文件,现在使用 Makevars 设置对更简单的相关 R 包执行相同的操作。有一些包使用 Rcpp 和 GSL 作为一个通用的外部库。您可以尝试查看它们的工作原理并了解它们的模式。

  • 一旦掌握了该模式,就可以将其应用到 OpenCV 中。

抱歉,我看不到明显的捷径。

关于c++ - 尝试使用 R 的 g++ 编译器编译 C++ 代码时出现 "linker input file"未使用错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5346517/

相关文章:

java - 如何在Android Activity中调用Jni对象?

c++ - CUDA 在内核中对在主机上创建的对象调用虚拟方法

c++ - 删除 std::list::iterator 不会使迭代器无效并销毁对象吗?

r - 类似于 R 中的 diff 的迭代和滞后函数,但不仅仅是差异?

r - 在 levelplot 中指定 NA 栅格值的颜色(R 包 rasterVis)

java - 在 Spring Boot 中将 .csv 文件上传到数据库

image-processing - CvBGCodeBookModel一个好的解释?

c++ - 如果嵌套对象具有相同的地址,编译器如何区分它们?

c++ - 链接列表 (C/C++)。同时创建列表结构和节点结构有哪些优点/缺点?

r - 将特定字符添加到重复的字符串