如何分析 Rcpp 代码(在 linux 上)

MOz*_*les 5 c++ profiling r rcpp gperftools

我用 Rcpp 制作了一个 R 包,其中整个模拟在 C++ 中运行,结果在 R 中分析。现在我需要分析我的函数,以便我可以优化它们,但 R 分析器无法区分 C++ 函数内部发生了什么,我当函数只能从 R 内部运行时,不知道如何运行 C++ 分析器。

到目前为止,我已经找到了一些使用 gperftools 的建议(问题教程),但指南不完整(也许他们假设我缺乏一定的知识水平?),缺少链接,我一直在撞墙。因此这个问题。这是我所在的位置:

  1. 安装 gperftools(我用 pacman 从 extra/gperftools 安装)
  2. 在 C++ 头文件中包含 gperftools/profiler.h
  3. 在我想要分析的 C++ 代码中添加 ProfilerStart("myprof.log") 和 ProfilerStop()
  4. 使用 -lprofiler 编译
  5. 运行 "$ CPUPROFILE="myprof.log" R -f myscript.R"

当前的墙是 gcc 告诉我“未定义符号:ProfilerStart”,所以我认为链接有问题?

MOz*_*les 1

毕竟这是一个链接错误,是由于我第一次使用 Makevars 缺乏经验造成的。在步骤 #4 中,我将“-lprofiler”添加到PKG_CXXFLAGS,用于编译,而我应该将其添加到PKG_LIBS. 我进行了更改,现在分析器工作得很好。现在这是我的 Makevar:

PKG_CXXFLAGS += -Wall -pedantic -g -ggdb #-fno-inline-small-functions PKG_LIBS += -lprofiler CXX_STD = CXX11