Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ cmake:未能链接到google profiler(GPerTools)_C++_Cmake_Profiler_Catkin_Gperftools - Fatal编程技术网

C++ cmake:未能链接到google profiler(GPerTools)

C++ cmake:未能链接到google profiler(GPerTools),c++,cmake,profiler,catkin,gperftools,C++,Cmake,Profiler,Catkin,Gperftools,我在ubuntu 16.04上 以下是我所做的: 已安装的GPERF工具: sudo apt-get install google-perftools libgoogle-perftools-dev 已从以下位置下载FindGperftools.cmake: 将FindGperftools.cmake重命名为GperftoolsConfig.cmake,并将其放置在我的软件包中的cmake文件夹中 添加到CMakelists.txt: set (Gperftools_DIR "${CMAKE

我在ubuntu 16.04上

以下是我所做的:

  • 已安装的GPERF工具:

    sudo apt-get install google-perftools libgoogle-perftools-dev
    
  • 已从以下位置下载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})
    
    ./my_executable
    
  • 在终端中,导出CPUPROFILE环境变量:

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

    target_link_libraries(my_executable ${GPERFTOOLS_PROFILER})
    
    ./my_executable
    
  • 没有错误消息,但未创建日志文件
    /my\u path/prof.out

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

    有什么我可能忘记的吗


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

    这看起来像ubuntu的(非标准)链接器功能,不链接那些不直接使用符号的库。尝试根据需要将-Wl,-no添加到您的LDFLAGS中(并确保在-lprofiler之前传递它)。

    可能这与问题无关,但将“Find”脚本重命名为“Config”one并不是CMake的常见用法:虽然这些脚本的用途类似,但它们在不同的“环境”中运行。例如,“查找”脚本中使用的
    find\u package\u handle\u standard\u args
    在“配置”脚本中没有意义。对于find“find”脚本本身,设置CMAKE\u MODULE\u PATH CMAKE变量。是否可能定义了错误的变量?在您提供的链接中,有一条评论说
    Gperftools\u ROOT\u DIR
    将此变量设置为Gperftools的ROOT安装
    ,这与您的答案中的
    Gperftools\u DIR
    不同