cmake:无法链接到谷歌分析器(gperftools)

Posted

技术标签:

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

我在 ubuntu 16.04 上。

我做了什么:

    已安装 gperftools:

    sudo apt-get install google-perftools libgoogle-perftools-dev
    

    从https://github.com/vast-io/vast/blob/master/cmake/FindGperftools.cmake下载了 FindGperftools.cmake

    FindGperftools.cmake 重命名为 GperftoolsConfig.cmake 并将其放在我的包中的 cmake 文件夹中

    添加到CMakelists.txt:

    set (Gperftools_DIR "$CMAKE_CURRENT_LIST_DIR/cmake/")
    find_package(Gperftools REQUIRED)
    

    在同一个 CMakelists.txt 中,链接我的可执行文件:

    target_link_libraries(my_executable $GPERFTOOLS_PROFILER)
    

    在终端中,导出 CPUPROFILE 环境变量:

    export CPUPROFILE=/my_path/prof.out
    

    在同一终端中,运行可执行文件:

    ./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 不同 【参考方案1】:

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

【讨论】:

以上是关于cmake:无法链接到谷歌分析器(gperftools)的主要内容,如果未能解决你的问题,请参考以下文章

CodeMagic 错误,无法发布到谷歌商店

php 地址到谷歌地图链接

从谷歌分析到谷歌表格的数据 - 格式错误的数字

是否有一致的方式链接到谷歌“我感到幸运”结果? [关闭]

发布到谷歌和亚马逊

谷歌分析 Bigquery 导出