Rcpp 未找到 Boost headers
Rcpp isn't finding Boost headers
我在 R 包项目中有一个名为 src/windows.cpp
的文件(向量的窗口函数,与 MS Windows 无关!)。文件的顶部如下所示:
// [[Rcpp::depends(BH)]]
// [[Rcpp::plugins(cpp11)]]
#include <Rcpp.h>
#include <algorithm>
#include <boost/algorithm/string/join.hpp>
using namespace Rcpp;
这似乎不足以让它找到 Boost headers - 当我执行 devtools::load_all(.)
触发编译时,我看到此构建失败:
* installing *source* package ‘MyPackage’ ...
** libs
g++ -m64 -I/usr/include/R -DNDEBUG -I"/home/rstudio/R/x86_64-redhat-linux-gnu-library/3.4/Rcpp/include"
-I/usr/local/include -std=c++11 -fpic -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2
-fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -c windows.cpp -o windows.o
windows.cpp:6:43: fatal error: boost/algorithm/string/join.hpp: No such file or directory
#include <boost/algorithm/string/join.hpp>
^
compilation terminated.
我已经安装了 BH
,并且存在相关的 headers:
> .libPaths()[1]
[1] "/home/rstudio/R/x86_64-redhat-linux-gnu-library/3.4"
> dir(file.path(.libPaths()[1], 'BH/include/boost/algorithm/string'))
[1] "case_conv.hpp" "classification.hpp" "compare.hpp"
[4] "concept.hpp" "config.hpp" "constants.hpp"
[7] "detail" "erase.hpp" "find_format.hpp"
[10] "find_iterator.hpp" "find.hpp" "finder.hpp"
[13] "formatter.hpp" "iter_find.hpp" "join.hpp"
[16] "predicate_facade.hpp" "predicate.hpp" "regex_find_format.hpp"
[19] "regex.hpp" "replace.hpp" "sequence_traits.hpp"
[22] "split.hpp" "std" "std_containers_traits.hpp"
[25] "trim_all.hpp" "trim.hpp" "yes_no_type.hpp"
看起来核心问题是 [[Rcpp::depends(BH)]]
指令没有将相关的 Boost 目录添加到编译器指令中,对吗?我应该在我的设置中寻找什么可能导致这种情况?
我已将 BH
添加到 DESCRIPTION
文件的 Imports:
部分,那是 correct/advisable 吗?
您是否已按照 here 所述将其添加到 LinkingTo
?
Note that while the Rcpp::depends
attribute establishes dependencies
for sourceCpp
, it’s important to note that if you include the same
source file in an R package these dependencies must still be listed in
the Imports
and/or LinkingTo
fields of the package DESCRIPTION
file.
...
Packages that provide only C++ header files (and no shared library) need only be referred to using LinkingTo
.
我在 R 包项目中有一个名为 src/windows.cpp
的文件(向量的窗口函数,与 MS Windows 无关!)。文件的顶部如下所示:
// [[Rcpp::depends(BH)]]
// [[Rcpp::plugins(cpp11)]]
#include <Rcpp.h>
#include <algorithm>
#include <boost/algorithm/string/join.hpp>
using namespace Rcpp;
这似乎不足以让它找到 Boost headers - 当我执行 devtools::load_all(.)
触发编译时,我看到此构建失败:
* installing *source* package ‘MyPackage’ ...
** libs
g++ -m64 -I/usr/include/R -DNDEBUG -I"/home/rstudio/R/x86_64-redhat-linux-gnu-library/3.4/Rcpp/include"
-I/usr/local/include -std=c++11 -fpic -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2
-fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -c windows.cpp -o windows.o
windows.cpp:6:43: fatal error: boost/algorithm/string/join.hpp: No such file or directory
#include <boost/algorithm/string/join.hpp>
^
compilation terminated.
我已经安装了 BH
,并且存在相关的 headers:
> .libPaths()[1]
[1] "/home/rstudio/R/x86_64-redhat-linux-gnu-library/3.4"
> dir(file.path(.libPaths()[1], 'BH/include/boost/algorithm/string'))
[1] "case_conv.hpp" "classification.hpp" "compare.hpp"
[4] "concept.hpp" "config.hpp" "constants.hpp"
[7] "detail" "erase.hpp" "find_format.hpp"
[10] "find_iterator.hpp" "find.hpp" "finder.hpp"
[13] "formatter.hpp" "iter_find.hpp" "join.hpp"
[16] "predicate_facade.hpp" "predicate.hpp" "regex_find_format.hpp"
[19] "regex.hpp" "replace.hpp" "sequence_traits.hpp"
[22] "split.hpp" "std" "std_containers_traits.hpp"
[25] "trim_all.hpp" "trim.hpp" "yes_no_type.hpp"
看起来核心问题是 [[Rcpp::depends(BH)]]
指令没有将相关的 Boost 目录添加到编译器指令中,对吗?我应该在我的设置中寻找什么可能导致这种情况?
我已将 BH
添加到 DESCRIPTION
文件的 Imports:
部分,那是 correct/advisable 吗?
您是否已按照 here 所述将其添加到 LinkingTo
?
Note that while the
Rcpp::depends
attribute establishes dependencies forsourceCpp
, it’s important to note that if you include the same source file in an R package these dependencies must still be listed in theImports
and/orLinkingTo
fields of the packageDESCRIPTION
file. ... Packages that provide only C++ header files (and no shared library) need only be referred to usingLinkingTo
.