Как связать разделяемую библиотеку jemalloc с помощью cmake

Я пытаюсь связать библиотеку jemalloc со своим приложением во время сборки, используя ее как общую реализацию. В соответствии с https://github.com/jemalloc/jemalloc/wiki/Getting-Started флаги связывания используются:

-L`jemalloc-config --libdir` -Wl,-rpath,`jemalloc-config --libdir` -ljemalloc `jemalloc-config --libs`

Итак, я сделал следующий CMakeLists.txt:

cmake_minimum_required(VERSION 2.8.12.2)
project(widget)
include_directories(include)
file(GLOB SOURCES "src/*.cpp")
add_executable(widget ${SOURCES})
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L`jemalloc-config --libdir` -Wl,-rpath,`jemalloc-config --libdir` -ljemalloc `jemalloc-config --libs`")

Но, когда я делаю make Я получаю следующие ошибки:

Linking CXX executable widget
c++: error: `jemalloc-config: No such file or directory
c++: error: unrecognized command line option ‘--libdir`’
c++: error: unrecognized command line option ‘--libdir`’
c++: error: unrecognized command line option ‘--libs`’
make[2]: *** [widget] Error 1
make[1]: *** [CMakeFiles/widget.dir/all] Error 2

3 ответа

Для будущих поколений, так как это по-прежнему одна из первых ссылок в Google.

Jemalloc поставляется с установкой pkg-config, которую можно использовать следующим образом:

find_package(PkgConfig REQUIRED)
pkg_check_modules (JEMALLOC jemalloc)

pkg_search_module(JEMALLOC REQUIRED jemalloc)
include_directories(${JEMALLOC_INCLUDE_DIRS})

target_link_libraries(your_target_name ${JEMALLOC_LIBRARIES})

Команда execute_process() - ваш друг. Используйте это для запуска jemalloc-config исполняемый файл и затем поместите его вывод в переменные CMake.

  1. найти вас root_dir jemalloc. Мой /Users/lion/homebrew/Cellar/jemalloc/5.2.1_1/lib/(я устанавливаю jemallocпо brewна макОС)
  2. связать (мягкую ссылку) всю свою библиотеку с вашей локальной библиотекой ln -s /Users/lion/homebrew/Cellar/jemalloc/5.2.1_1/lib/* /usr/local/lib

Тогда это работает!

Другие вопросы по тегам