Как связать разделяемую библиотеку 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.
- найти вас root_dir jemalloc. Мой
/Users/lion/homebrew/Cellar/jemalloc/5.2.1_1/lib/
(я устанавливаюjemalloc
поbrew
на макОС) - связать (мягкую ссылку) всю свою библиотеку с вашей локальной библиотекой
ln -s /Users/lion/homebrew/Cellar/jemalloc/5.2.1_1/lib/* /usr/local/lib
Тогда это работает!