【问题标题】:cmake : failing to link against google profiler (gperftools)cmake:无法链接到谷歌分析器(gperftools)
【发布时间】:2018-03-04 12:01:17
【问题描述】:

我在 ubuntu 16.04 上。

我做了什么:

  1. 已安装 gperftools:

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

  3. FindGperftools.cmake 重命名为 GperftoolsConfig.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 不会产生任何结果)。 然而,当查看 build 文件夹中的文件时,编译器似乎进行了链接(-lprofile 在那里)。

我可能忘记了什么?

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

【问题讨论】:

  • 可能与问题无关,但是将“Find”脚本重命名为“Config”并不是 CMake 的常见用法:虽然这些脚本的目的相似,但脚本运行在不同的“环境”。例如,“查找”脚本中使用的find_package_handle_standard_args 在“配置”脚本中没有意义。对于查找“查找”脚本本身,请设置 CMAKE_MODULE_PATH CMake 变量。
  • 您是否定义了错误的变量?在您提供的评论链接中,Gperftools_ROOT_DIRSet this variable to the root installation of Gperftools 与您的回答中的Gperftools_DIR 不同

标签: c++ cmake profiler catkin gperftools


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多