0

我在 ubuntu 16.04 上。

这是我所做的:

  1. 安装 gperftools :

    sudo apt-get install google-perftools libgoogle-perftools-dev
    
  2. 从以下位置下载 FindGperftools.cmake:https ://github.com/vast-io/vast/blob/master/cmake/FindGperftools.cmake

  3. 重命名FindGperftools.cmakeGperftoolsConfig.cmake并将其放置cmake在我的包中的文件夹中

  4. 添加到CMakelists.txt

    set (Gperftools_DIR "${CMAKE_CURRENT_LIST_DIR}/cmake/")
    find_package(Gperftools REQUIRED)
    
  5. 在同一个 CMakelists.txt 中,链接我的可执行文件:

    target_link_libraries(my_executable ${GPERFTOOLS_PROFILER})
    
  6. 在终端中,导出 CPUPROFILE 环境变量:

    export CPUPROFILE=/my_path/prof.out
    
  7. 在同一终端中,运行可执行文件:

    ./my_executable
    

没有错误消息,但未/my_path/prof.out创建日志文件。

如果我在“my_executable”上运行“ldd”,它不会显示与探查器的任何链接(ldd ./my_executable | grep profil不会产生任何结果)。然而,当查看构建文件夹中的文件时,编译器似乎做了链接(-lprofile在那里)。

有什么我可能忘记的吗?

注意:不确定是否相关,但我使用 catkin。

4

1 回答 1

1

这看起来像 ubuntu 的(和非标准的)链接器功能,不链接直接不使用符号的库。尝试将 -Wl,-no-as-needed 添加到您的 LDFLAGS 中(并确保它在 -lprofiler 之前通过)。

于 2018-03-05T06:33:54.207 回答