cmake: не удалось установить ссылку на профилировщик Google (gperftools)

У меня убунту 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.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 не создается.

Если я запускаю «ldd» для «my_executable», он не показывает никакой связи с профилировщиком (ldd ./my_executable | grep profil ничего не дает). Тем не менее, при просмотре файлов в папке сборки компилятор, кажется, выполняет связь (там -lprofile).

Может я что забыл?

Примечание: не уверен, что это уместно, но я использую сережку.


person Vince    schedule 04.03.2018    source источник
comment
Вероятно, это не связано с проблемой, но переименование скрипта Find в Config не является обычным использованием CMake: хотя цели этих скриптов схожи, скрипты запускаются в разных средах. Например, find_package_handle_standard_args, используемый в скрипте Find, не имеет смысла в скрипте Config. Для поиска самого скрипта Find установите переменную CMAKE_MODULE_PATH CMake.   -  person Tsyvarev    schedule 04.03.2018
comment
Возможно ли, что вы определили неправильную переменную? В предоставленной вами ссылке комментарий говорит Gperftools_ROOT_DIR Set this variable to the root installation of Gperftools Что отличается от Gperftools_DIR из вашего ответа.   -  person benathon    schedule 09.08.2018


Ответы (1)


Это похоже на функцию компоновщика Ubuntu (и нестандартную), чтобы не связывать библиотеки, символы которых напрямую не используются. Попробуйте добавить -Wl,-no-as-needed к вашим LDFLAGS (и убедитесь, что он передан до -lprofiler).

person Aliaksei Kandratsenka    schedule 05.03.2018