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_DIR
Set this variable to the root installation of Gperftools
与您的回答中的Gperftools_DIR
不同
【参考方案1】:
这看起来像 ubuntu 的(和非标准的)链接器功能,不链接直接不使用符号的库。尝试将 -Wl,-no-as-needed 添加到您的 LDFLAGS 中(并确保它在 -lprofiler 之前通过)。
【讨论】:
以上是关于cmake:无法链接到谷歌分析器(gperftools)的主要内容,如果未能解决你的问题,请参考以下文章